Php RFC822标准的正则表达式
我们面临的问题可以用正则表达式解决: 某些电子邮件地址不符合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代码: 输出:Php RFC822标准的正则表达式,php,regex,email,Php,Regex,Email,我们面临的问题可以用正则表达式解决: 某些电子邮件地址不符合RFC822标准。 特殊字符存在问题,例如>,@不在引号内,并且不是电子邮件地址 以下是输入变量: Neuman@BBN-特内萨 阿尔弗雷德>纽曼 阿尔弗雷德>纽曼,阿尔弗雷德•纽曼,阿尔弗雷德>纽曼,阿尔弗雷德>纽曼 阿尔弗雷德>纽曼 阿尔弗雷德·纽曼 这是需要的输出: Neuman@BBN-特内萨 阿尔弗雷德>纽曼 阿尔弗雷德>纽曼,阿尔弗雷德•纽曼,阿尔弗雷德>纽曼,阿尔弗雷德>纽曼 阿尔弗雷德>纽曼 阿尔弗雷德·纽曼 有人能帮助
您的输入示例包括非电子邮件地址的内容。如果你有特殊的字符,而这些字符不是电子邮件地址的一部分,那么为什么它们是你问题的一部分呢?您没有明确的问题陈述。电子邮件地址之所以具有这种结构,是因为它们可以被解析——如果数据是以不可解析的格式写入的,则无法解析。虽然你可以从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>