更换

时间:2010-03-27 15:41:22

标签: php regex mailto

我想用简单的电子邮件替换html中的所有“mailto:”链接。

In: text .... <a href="mailto:somebody@example.org">not needed</a> text
Out: text .... somebody@example.org text

我这样做了:

$str = preg_replace("/\<a.+href=\"mailto:(.*)\".+\<\/a\>/", "$1", $str);

但如果字符串中的多个电子邮件或“a”标记内的html

,则会失败
In: <a href="mailto:hello@somedomain.org">not needed</a><a href="mailto:somebody@example.org"><font size="3">somebody@example.org</font></a>
Out: somebody@example.org">

1 个答案:

答案 0 :(得分:3)

?添加到量词+*,将您的匹配非贪婪

$str = preg_replace("/\<a.+?href=\"mailto:(.*?)\".+?\<\/a\>/", "$1", $str);

此外,您无需转义<>,因为模式中有一些/,最好使用不同的分隔符,因为您没有在内部进行任何变量插值模式,不需要以"方式将其括起来,这样就可以避免在模式中转义"

$str = preg_replace('#<a.+?href="mailto:(.*?)".+?</a>#', "$1", $str);