3

我有一个 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”的情况。

感谢帮助!

谢谢,瓦伦

4

1 回答 1

1

您可以使用此模式:

$result = preg_replace('~(?:https?:\S+|<a\b[^>]*)(*SKIP)(?!)|-~i', ' ', $html);

这个想法是在尝试匹配-. 然后你让模式失败(?!),总是错误的,你停止回溯(*SKIP)

这种方法的优点是您可以自由选择要替换目标字符串的内容,而无需使用preg_replace_callback()

$result = preg_replace_callback('~(https?:\S+|<a\b[^>]*)|-~i', 
                                function ($m) { return ($m[1])? $m[1] : ' ';},
                                $html);

在这两个示例中,您可以轻松添加所需的内容:img 标签、www 等。

于 2013-11-07T12:17:11.883 回答