PHP 如何将预组设置为“非捕获”(?:..)


PHP How to set the preg-groups to "non-capture" (?:...)

在HTML页面中,我删除了这样的HTML注释

$contentHTML = preg_replace("#(?=<!--)(['s'S]*?)-->#", "", $contentHTML);

但是在preg_replace的一大页上,我得到了"PHP致命错误:允许的内存大小......"

也许,一种解决方案将使用不匹配组来避免捕获文本?有人可以解释如何使用匹配组?:

或者如何在没有preg_replace的情况下抑制大页面中的 HTML 注释?

只需展开正则表达式即可

$contentHTML = preg_replace("#<!--[^-]*(?:-(?!->)[^-]*)*-->#", "", $contentHTML);

请参阅正则表达式演示。Comapre 与你的步骤大约是我的 3 倍,举一个非常简短的例子。

详:

  • <!-- - 评论开始
  • [^-]* - 0+ 非-
  • (?:-(?!->)[^-]*)* - 0+ 个
  • -序列,后面不跟 ->,然后是 0+ 非- s
  • --> - 注释结束