如何修改此正则表达式?

时间:2011-11-11 14:32:52

标签: php regex

我在页面<a href='mailto:xyz@xyz.com'>上的电子邮件格式如下 我试图匹配正则表达式

我目前正在使用这个:

$pattern = '#a[^>]+href="mailto:([^"]+)"[^>]*?>#is';
preg_match_all($pattern, $data, $matches);
foreach ($matches[1] as $key => $email) {
    $emails[] = $email;
}

但结果不匹配。 $emailsNULL

我只是学习正则表达式,所以请原谅这个问题! 有人可以解释为什么它不起作用并建议改变?感谢

3 个答案:

答案 0 :(得分:1)

问题在于,您的示例中使用的是单引号',而在正则表达式中,它正在寻找双引号"

将您的模式更改为:

$pattern = '#a[^>]+href=\'mailto:([^\']+)\'[^>]*?>#is';

会做的伎俩。

答案 1 :(得分:1)

只需添加双引号的支持,如@ Linus-Kleen和@thetaiko所说:

$pattern = '#a[^>]+href=[\'"]mailto:([^\'"]+)[\'"][^>]*?>#is';

答案 2 :(得分:0)

正则表达式有效,但你不检查'(单引号)和“(双引号)这样

<a href='mailto:xyz@xyz.com'>

不会匹配,但

<a href="mailto:xyz@xyz.com">

意愿。

只需将正则表达式更改为

即可
'#a[^>]+href=[\'"]+mailto:([^"]+)[\'"]+[^>]*?>#is'

会做到这一点!