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
  • --> - конец комментария
Другие вопросы по тегам