PHP 如何将预组设置为 "non-capture" (?:...)

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);

通过一个非常简短的示例,看到 regex demo. Comapre with yours 的步数是我的大约 3 倍。

详情:

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