PHP如何将preg-groups设置为“non-capture”(?:...)

时间:2016-04-27 09:25:10

标签: php regex preg-replace capturing-group regex-group

在HTML页面中,我删除了像这样的HTML评论

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

但在preg_replace的大页面上,我收到了“ PHP致命错误:允许的内存大小......

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

或者如何在没有preg_replace的情况下在大页面中禁止HTML评论?

1 个答案:

答案 0 :(得分:2)

将正则表达式展开为

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

请参阅regex demo。与yours合作的Comapre大约是我的步数的3倍,只有很短的例子。

详细说明:

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