我有一个文字字符串。这可能包含也可能不包含电子邮件地址。我想替换所有。 (句号)到点。
blah blah abcd@gmail.com fooo some content and email again
到
blah blah abcd@gmail dot com fooo some content and email again
我可以使用正则表达式吗?
-Thanks 阿伦
答案 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)