php preg_match_all条件模式

时间:2015-05-31 12:39:02

标签: php regex matching pcre

php模式正则表达式语法真的让我很头疼...我试图匹配除了带有id =" pagespeed"的js标签之外的所有javascript标签,以便我可以将它们移动到某个地方其他。我需要的只是模式条件,其他一切都已完成。

我有这个:

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

找到所有标签,现在我需要检查异常情况是否为真。应该是这样的:

 ~^<script.+id=\"pagespeed\".*</script>]~

该行可能是错误的,需要与上面的行结合使用。如果有人可以帮助我会很好,因为我似乎对这个PCRE语法很糟糕:(

2 个答案:

答案 0 :(得分:2)

由于您正在处理结构化数据,因此更简单的方法是使用结构并查询它而不是使用文本方法。此外,这种方法可以防止您陷入可能包含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();

答案 1 :(得分:0)

我会用@ Casimir的答案为此目的..如果你正在寻找一个正则表达式..使用以下模式:

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

请参阅DEMO