php模式正则表达式语法真的让我很头疼...我试图匹配除了带有id =" pagespeed"的js标签之外的所有javascript标签,以便我可以将它们移动到某个地方其他。我需要的只是模式条件,其他一切都已完成。
我有这个:
$jsPattern = '#<script.*</script>#isUm';
找到所有标签,现在我需要检查异常情况是否为真。应该是这样的:
~^<script.+id=\"pagespeed\".*</script>]~
该行可能是错误的,需要与上面的行结合使用。如果有人可以帮助我会很好,因为我似乎对这个PCRE语法很糟糕:(
答案 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