我想用简单的电子邮件替换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">
答案 0 :(得分:3)
将?
添加到量词+
和*
,将您的匹配非贪婪:
$str = preg_replace("/\<a.+?href=\"mailto:(.*?)\".+?\<\/a\>/", "$1", $str);
此外,您无需转义<
和>
,因为模式中有一些/
,最好使用不同的分隔符,因为您没有在内部进行任何变量插值模式,不需要以"
方式将其括起来,这样就可以避免在模式中转义"
:
$str = preg_replace('#<a.+?href="mailto:(.*?)".+?</a>#', "$1", $str);