我们所面临的问题可以用正则表达式来解决:https://github.com/php-mime-mail-parser/php-mime-mail-parser/issues/176,一些电子邮件地址并不符合RFC822标准。特殊字符(例如)有问题。>
,@
),它不在"
的引号之内,也不是电子邮件地址。
以下是输入变体:
Neuman@BBN-TENEXA
Alfred > Neuman <Neuman@BBN-TENEXA>
Alfred > Neuman <Neuman@BBN-TENEXA>, Alfred Neuman <Neuman@BBN-TENEXA>, "Alfred > Neuman" <Neuman@BBN-TENEXA>, Alfred > Neuman <Neuman@BBN-TENEXA>
"Alfred > Neuman" <Neuman@BBN-TENEXA>
Alfred @ Neuman <Neuman@BBN-TENEXA>
这是必要的产出:
Neuman@BBN-TENEXA
"Alfred > Neuman" <Neuman@BBN-TENEXA>
"Alfred > Neuman" <Neuman@BBN-TENEXA>, Alfred Neuman <Neuman@BBN-TENEXA>, "Alfred > Neuman" <Neuman@BBN-TENEXA>, "Alfred > Neuman" <Neuman@BBN-TENEXA>
"Alfred > Neuman" <Neuman@BBN-TENEXA>
"Alfred @ Neuman" <Neuman@BBN-TENEXA>
有人能帮助创建这样的替换reg exp吗?
发布于 2018-02-01 13:15:24
Regex:".*?"(*SKIP)(*FAIL)|(\w+\s[<>@]\s\w+)
替代:"$1"
或者如果你想更精确地使用:
"\w+\s[<>@]\s\w+"(*SKIP)(*FAIL)|(\w+\s[<>@]\s\w+)
"Alfred\s[<>@]\sNeuman"(*SKIP)(*FAIL)|(Alfred\s[<>@]\sNeuman)
PHP代码
$text = 'Neuman@BBN-TENEXA
Alfred > Neuman <Neuman@BBN-TENEXA>
Alfred > Neuman <Neuman@BBN-TENEXA>, Alfred Neuman <Neuman@BBN-TENEXA>, "Alfred > Neuman" <Neuman@BBN-TENEXA>, Alfred > Neuman <Neuman@BBN-TENEXA>
"Alfred > Neuman" <Neuman@BBN-TENEXA>
Alfred @ Neuman <Neuman@BBN-TENEXA>';
$text = preg_replace("/\".*?\"(*SKIP)(*FAIL)|(\w+\s[<>@]\s\w+)/", "\"$1\"", $text);
print_r($text);
输出
Neuman@BBN-TENEXA
"Alfred > Neuman" <Neuman@BBN-TENEXA>
"Alfred > Neuman" <Neuman@BBN-TENEXA>, Alfred Neuman <Neuman@BBN-TENEXA>, "Alfred > Neuman" <Neuman@BBN-TENEXA>, "Alfred > Neuman" <Neuman@BBN-TENEXA>
"Alfred > Neuman" <Neuman@BBN-TENEXA>
"Alfred @ Neuman" <Neuman@BBN-TENEXA>
https://stackoverflow.com/questions/48563429
复制相似问题