我想解析由各种分隔符分隔的电子邮件地址列表。我正在使用的正则表达式是:
/(\S+?@\S+?\.\S+?)[,|;|\|\s|\n|\r|\t|\0|\b|$]/gmi
问题是,in the example demo above,它没有获取列表中的最后一项。如何获取列表中的最后一个电子邮件地址?
答案 0 :(得分:1)
您不能在字符类中使用$
作为行/字符串终止符,它将被理解为字面上的美元字符:/(\S+?@\S+?\.\S+?)[,|;|\|\s|\n|\r|\t|\0|\b|$]/gmi
不起作用,/(\S+?@\S+?\.\S+?)([,|;|\|\s|\n|\r|\t|\0|\b|]|$)/gmi
确实
此外,我建议对你的正则表达式进行一些改进:
NUL
(\0
)字符。它不仅不会出现在你的字符串中,即使它确实会与$
m
标记,除非单个地址可以分成多行i
标志,这不会影响您正在使用的字符类我也怀疑你想将centralreservation@ramaya;nahotel.com
作为有效地址。
总之,我建议您使用[^\s;,@]+@[^\s;,@]+\.[^\s;,@]+
,或者更好地停止尝试使用正则表达式验证电子邮件地址,而是使用专门的库。要了解原因,请检查the regex this perl module用于验证电子邮件。它甚至没有完全实现RFC ......
非常感谢Sebastian Proske的帮助。