Синтаксические особенности шаблонов php regex вызывают у меня головную боль … Я пытаюсь сопоставить все теги javascript, кроме тегов js с id = «pagespeed», чтобы я мог переместить их куда-нибудь еще. Все, что мне нужно, это условие шаблона, все остальное сделано.
У меня есть это:
$jsPattern = '#<script.*</script>#isUm';
который находит все теги, и теперь мне нужно проверить, что исключительное условие не соответствует действительности. Должно быть что-то вроде:
~^<script.+id=\"pagespeed\".*</script>]~
Линия, вероятно, неверна и должна быть объединена с линией выше. Было бы здорово, если бы кто-то мог мне помочь, так как мне кажется, что этот синтаксис PCRE сосет
Я бы использовал ответ @ Casimir для этой цели .. Если вы ищете регулярное выражение .. используйте следующий шаблон:
<script[^>]*id="(?!pagespeed\b)[^"]+".*<\/script>
Увидеть DEMO
Поскольку вы имеете дело со структурированными данными, более простой способ — использовать структуру и запрашивать ее, а не использовать текстовый подход. Кроме того, этот подход предотвратит попадание во многие ловушки, которые могут содержать HTML-код.
$dom = new DOMDocument;
$dom->loadHTML($html);
$xp = new DOMXPath($dom);
$scriptNodeList = $xp->query('//script[not(@id="pagespeed")]');
foreach ($scriptNodeList as $scriptNode) {
$scriptNode->parentNode->removeChild($scriptNode);
}
echo $dom->saveHTML();