我有一个html内容如下:
$html = "My name is Varun-Kumar. My webpage is <a href='http://varundeboss.com/varun-home-page'>Varundeboss</a> Also http://varundeboss.home.com/varun-home-page";
现在我想从html中删除所有出现的“ - ”,除非它出现在锚标记内以及以“http://”,“https://”和“www”开头的链接中。 “
我可以使用以下代码为锚标记执行此操作:
$result = preg_replace('%-(?![^<]*</a>)%i', '', $html);
有人可以帮助我如何更改此正则表达式以包含“http://”,“https://”和“www。”的案例。
感谢帮助!
谢谢, VARUN
答案 0 :(得分:1)
您可以使用此模式:
$result = preg_replace('~(?:https?:\S+|<a\b[^>]*)(*SKIP)(?!)|-~i', ' ', $html);
我的想法是在尝试匹配-
之前匹配您想要避免的内容。然后,您使该模式失败,(?!)
始终为false,并使用(*SKIP)
停止回溯
此方法的优点是您可以自由选择替换目标字符串而不使用preg_replace_callback()
:
$result = preg_replace_callback('~(https?:\S+|<a\b[^>]*)|-~i',
function ($m) { return ($m[1])? $m[1] : ' ';},
$html);
在这两个示例中,您可以轻松添加所需内容:img tags,www等。