正则表达式OR功能

时间:2013-11-07 11:24:16

标签: php regex

我有一个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

1 个答案:

答案 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等。