【发布时间】:2020-04-18 13:30:22
【问题描述】:
在这里被逼上墙。我查看了其他有正则表达式负前瞻的帖子,但由于某种原因我无法让它工作。可能错过了一些非常简单的东西,但在尝试了几个小时后我需要帮助!
所以,我试图找到 preg_replace 的模式,它通过代码搜索 href 链接,该链接忽略任何包含特定域的内容,也忽略任何包含名为 data-fancybox 的 js 引用的内容。
在下文中,它必须忽略前 3 个包含 data-fancybox 的内容,同时也忽略 #4 youtube 链接。它应该只找到最后 2 个。
<a href="https://youtube.com/" data-fancybox><a href="https://example.com/" data-fancybox><a href="https://vimeo.com/" data-fancybox><a href="https://youtube.com/"><a href="https://example.com/"><a href="https://vimeo.com/">
当我尝试这个时:
<a href=.*((youtube|data-fancybox)).*>
它选择前 4 个并忽略后两个。但是当我试图把这个负面的,所以它只挑选出最后两个时,它最终把它们都挑选出来了:
<a href=.*(?!(youtube|data-fancybox)).*>
任何帮助表示赞赏!
【问题讨论】:
-
为什么不呢? if (!preg_match($pattern,$string)):
-
我不能使用'? if (!preg_match($pattern,$string)):' 因为 preg_match 需要遍历一大块 HTML 文本,其中包含各种 href 链接;它需要在返回 HTML 块之前选择某些链接并调整它们
标签: php regex preg-replace