php预匹配所有条件模式

php预匹配所有条件模式,php,regex,matching,pcre,Php,Regex,Matching,Pcre,php模式正则表达式语法的东西真的让我头疼。。。我正在尝试匹配所有javascript标记,除了id为=“pagespeed”的js标记之外,以便将它们移动到其他地方。我所需要的只是模式条件,其他一切都完成了 我有这个: $jsPattern = '#<script.*</script>#isUm'; $jsPattern='#因为您处理的是结构化数据,所以更简单的方法是使用结构并查询它,而不是使用文本方法。此外,这种方法将防止您落入可能包含html代码的许多陷阱 $do

php模式正则表达式语法的东西真的让我头疼。。。我正在尝试匹配所有javascript标记,除了id为=“pagespeed”的js标记之外,以便将它们移动到其他地方。我所需要的只是模式条件,其他一切都完成了

我有这个:

  $jsPattern = '#<script.*</script>#isUm';

$jsPattern='#因为您处理的是结构化数据,所以更简单的方法是使用结构并查询它,而不是使用文本方法。此外,这种方法将防止您落入可能包含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();

为此,我将使用@Casimir的答案。。如果您正在寻找正则表达式。。使用以下模式:

<script[^>]*id="(?!pagespeed\b)[^"]+".*<\/script>
]*id=“(?!pagespeed\b)[^”]+”*

请参见

使用DOMXPath将更简单。由于HTML(和XML)的原因,我不会为此使用正则表达式。正则表达式用于HTML作为嵌套语言。考虑使用instead@Machavity:PCRE能够解析嵌套结构。@casimirithippolyte我从来没有说过它不能。我说它有问题。在这种情况下,OP最好使用DomDocument解决方案,它可以做同样的事情而不会出现任何问题。感谢您的帮助…这将是更好的解决方案,但我只是想在一个更大的框架中快速修复一个已经存在的正则表达式语法,所以我不得不使用Karthik的解决方案,对不起
<script[^>]*id="(?!pagespeed\b)[^"]+".*<\/script>