PHP Как установить preg-groups в "non-capture" (?:...)
На странице HTML я удаляю комментарии HTML вот так
$contentHTML = preg_replace("#(?=<!--)([\s\S]*?)-->#", "", $contentHTML);
Но на огромной странице для preg_replace
Я получил "PHP Fatal error: допустимый объем памяти..."
Возможно, одно из решений будет использовать несоответствующую группу, чтобы избежать захвата текста? Может ли кто-нибудь объяснить, как использовать группу соответствия ?:
Или как я могу подавить комментарии HTML на огромной странице без preg_replace
?
1 ответ
Решение
Просто разверните регулярное выражение как
$contentHTML = preg_replace("#<!--[^-]*(?:-(?!->)[^-]*)*-->#", "", $contentHTML);
Смотрите демо-версию регулярного выражения. Comapre с вашим, делая в 3 раза больше шагов, чем мой, с очень коротким примером.
Подробности:
<!--
- начало комментария[^-]*
- 0+ не-
(?:-(?!->)[^-]*)*
- 0+ последовательностей-
это не сопровождается->
а затем 0+ не-
s-->
- конец комментария