替换。从电子邮件地址

时间:2011-01-17 14:59:56

标签: php regex email preg-replace

我有一个文字字符串。这可能包含也可能不包含电子邮件地址。我想替换所有。 (句号)到点。

blah blah abcd@gmail.com  fooo some content and email again 

blah blah abcd@gmail dot com  fooo some content and email again  

我可以使用正则表达式吗?

-Thanks 阿伦

2 个答案:

答案 0 :(得分:3)

如果您拥有.NET正则表达式引擎,则可以通过搜索(?:.(?=\S+@)|(?<=@\S+).)并将所有匹配替换为dot来在单个正则表达式中执行此操作。

在PHP中,你必须分两步/迭代地完成它:

搜索\.(?=\S+@)并替换为dot

$subject = preg_replace('/\.(?=\S+@)/', ' dot ', $subject);

这将替换@之前发生的电子邮件地址中的所有点。然后搜索(@\S+)\.并替换为\1 dot;重复这个,直到没有进一步的匹配。

这样的东西
while (preg_match('/(@\S+)\./', $subject)) {
    $subject = preg_replace('/(@\S+)\./', '\1 dot ', $subject);
}

这将匹配@之后的电子邮件地址内的一个点,但由于PHP的正则表达式引擎不支持无限外观,我需要将正则表达式重新应用到字符串,这是最大点数的倍数在@之后。例如,在字符串@foo.bar.com中,它将首先与@foo.bar.匹配,并替换为@foo.bar dot。然后,在下一次运行中,它会将@foo.替换为@foo dot

答案 1 :(得分:0)