【发布时间】:2011-05-14 14:13:46
【问题描述】:
我需要从带有正则表达式的 mailto 属性的锚点获取电子邮件地址。
这个模式:(.*)<a\s(.*?)(.*)\s*href\=['"]mailto:([-a-z0-9_]+)@([a-z0-9-]+).([a-z]+)['"]>(.*)</a>(.*)
在正则表达式教练中工作,尽管它不适用于 PHP。
代码:
preg_match("'(.*)<a (.*?)(.*) *href\=['\"]mailto:([-a-z0-9_]+)@([a-z0-9-]+).([a-z]+)['\"]>(.*)</a>(.*)'si", "<a href=\"mailto:someemail@ohio.com\"">Some email</a>", $matches);
print_r($matches);
那么为什么它不能在 php 中工作呢?
【问题讨论】:
-
附带说明:您需要在角色类中添加
+作为角色 :([-a-z0-9_]+) 因为有些人使用它们来过滤触发器电子邮件地址,例如 foo+bar@devnull.nz -
所有这些
.*将导致可怕的性能行为。 -
旁注:虽然很少见,但拥有像这样的电子邮件地址是完全可以接受的:hell.o\@world@two.ats.com 您最好选择更简单的正则表达式,除非电子邮件存在一些安全问题。取决于你用 em 做什么。
-
@Gumbo 会
.*$做吗?基本上都到行尾? -
@DampeS8N:不,
hell.o\@world@example.com无效(\和@都无效)。但是"hell.o@world"@example.com是有效的。
标签: php regex anchor preg-match mailto