替换文件中的所有链接
这个问题在这里已经有了答案:
尝试~<a href="(.(?!remedy))*?".*?>(.*?)</a>~i
对于这个问题,你在做什么错误:正则表达式匹配永远如果有可能和每个URL(甚至包含remedy
)可以匹配'~<a href=".*?(?!remedy).*?".*?>(.*?)</a>~i'
因为您没有指定remedy
可能不包含在属性中的任何位置,但是您指定了必须有任何/没有( .*?
)的remedy
除了那些以<a href="remedy"
开头的url之外,任何url都是这种情况。 希望能理解...
我可能会使用这个:
<a href="(?:(?!remedy)[^"])*"[^>]*>([^<]*)</a>
最有趣的部分是这样的:
"(?:(?!remedy)[^"])*"
每当[^"]
将要消耗另一个字符时,它就会向前查看,以确认它不是单词remedy
的第一个字符。使用[^"]
代替.
阻止它看结束报价之外的任何内容。 我也冒着替换你的.*?
的自由.*?
否定字符类。 这也是为了达到同样的目的,将比赛保持在你想要的地方。 它也更高效,更强大。
当然,我假设<a>
元素的内容是纯文本,没有更多的元素嵌套在里面。 事实上,这只是我做出的许多简化假设之一。 没有它们,你无法将HTML与正则表达式匹配。