假设我有一个巨大的xml文件,其中包含大量信息,包括电子邮件地址。因此,所有电子邮件地址都将如下所示:
用户 @ gmail.com
我遇到正则表达式交易的问题。我如何匹配电子邮件地址但只替换用户部分?我尝试使用前瞻性的锚点没有运气,(它最终在@ gmail.com之前取代了一切)有没有办法使用前瞻但只能在用户之前使用白色空间?或者有一个简单的解决方案吗?现在我有以下内容:
perl' s /(?= @ gmail.com)/ replacement $& / ge' file.xml
显然不起作用。任何帮助深表感谢!
答案 0 :(得分:0)
使用除了空格和@:
之外的所有字符类s/[^\s@]+(?=@gmail\.com)/replacement/g
答案 1 :(得分:0)
您可以随时使用html5电子邮件验证程序获取用户名 http://www.w3.org/TR/html5/forms.html#valid-e-mail-address
$string =~ s/[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)/$1/g;
展开:
[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+
( # (1 start)
@
[a-zA-Z0-9]
(?:
[a-zA-Z0-9-]{0,61}
[a-zA-Z0-9]
)?
(?:
\.
[a-zA-Z0-9]
(?:
[a-zA-Z0-9-]{0,61}
[a-zA-Z0-9]
)?
)*
) # (1 end)
答案 2 :(得分:0)
s/ (\S+)@gmail\.com/replacement string/g;
我认为这将解决您的问题
<email>this is user@gmail.com</email>
这个正则表达式
s/([^>]+)@gmail\.com/replacement string/g
将解决此问题
<email>user@gmail.com</email>
这个
s/([^"]+)@gmail\.com/replacement string/g
将解决此问题
<person email="user@gmail.com"></person>
结合起来,我们有
s/(\S+|[^>]+|[^"]+)@gmail\.com/replacement string/g