Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php RFC822标准的正则表达式_Php_Regex_Email - Fatal编程技术网

Php RFC822标准的正则表达式

Php RFC822标准的正则表达式,php,regex,email,Php,Regex,Email,我们面临的问题可以用正则表达式解决: 某些电子邮件地址不符合RFC822标准。 特殊字符存在问题,例如>,@不在引号内,并且不是电子邮件地址 以下是输入变量: Neuman@BBN-特内萨 阿尔弗雷德>纽曼 阿尔弗雷德>纽曼,阿尔弗雷德•纽曼,阿尔弗雷德>纽曼,阿尔弗雷德>纽曼 阿尔弗雷德>纽曼 阿尔弗雷德·纽曼 这是需要的输出: Neuman@BBN-特内萨 阿尔弗雷德>纽曼 阿尔弗雷德>纽曼,阿尔弗雷德•纽曼,阿尔弗雷德>纽曼,阿尔弗雷德>纽曼 阿尔弗雷德>纽曼 阿尔弗雷德·纽曼 有人能帮助

我们面临的问题可以用正则表达式解决: 某些电子邮件地址不符合RFC822标准。 特殊字符存在问题,例如>,@不在引号内,并且不是电子邮件地址

以下是输入变量:

Neuman@BBN-特内萨 阿尔弗雷德>纽曼 阿尔弗雷德>纽曼,阿尔弗雷德•纽曼,阿尔弗雷德>纽曼,阿尔弗雷德>纽曼 阿尔弗雷德>纽曼 阿尔弗雷德·纽曼 这是需要的输出:

Neuman@BBN-特内萨 阿尔弗雷德>纽曼 阿尔弗雷德>纽曼,阿尔弗雷德•纽曼,阿尔弗雷德>纽曼,阿尔弗雷德>纽曼 阿尔弗雷德>纽曼 阿尔弗雷德·纽曼 有人能帮助创建这样的替换reg exp吗?

Regex:.**跳过*失败|\w+\s[@]\s\w+替换:$1

或者,如果您想更精确地使用:

\w+\s[@]\s\w+*跳过*失败|\w+\s[@]\s\w+

阿尔弗雷德\s[@]\sNeuman*跳过*失败|阿尔弗雷德\s[@]\sNeuman

PHP代码:

输出:


您的输入示例包括非电子邮件地址的内容。如果你有特殊的字符,而这些字符不是电子邮件地址的一部分,那么为什么它们是你问题的一部分呢?您没有明确的问题陈述。电子邮件地址之所以具有这种结构,是因为它们可以被解析——如果数据是以不可解析的格式写入的,则无法解析。虽然你可以从FSM中获得比正则表达式更多的里程数,但是对于你的imp实现来说,有太多的边缘情况是无法证明是正确的。
$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>