Sie sollten HTML mit den richtigen Tools wie DOMDocument
analysieren, statt sich auf reguläre Ausdrücke zu verlassen.
Hier ein Ausschnitt zeigt, wie die script
Tags customfunction_div
innen, die das Wort zu ergreifen, und entfernen Sie sie:
$html = "<html><head><script type='text/javascript'>\n if(typeof(jQuery)==\"function\"){(function(\$){\$.fn.fitVids=function(){}})(jQuery)};\n customfunction('cu').setup(\n {\"playlist\":\"customfunction\/jw6\/eM0MzdZ2.xml\"}\n);\n</script>\n\n<script type='text/javascript'>\n if(typeof(jQuery)==\"function\"){(function(\$){\$.fn.fitVids=function(){}})(jQuery)};\n customfunction('customfunction_div').setup(\n {\"playlist\":\"customfunction\/jw6\/eM0MzdZ2.xml\"}\n);\n</script></head><body>TEXT</body></html>";
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD);
$xp = new DOMXPath($dom);
$scripts = $xp->query('//script[contains(.,"customfunction_div")]');
foreach ($scripts as $script) {
$script->parentNode->removeChild($script);
}
echo $dom->saveHTML();
Siehe PHP demo
Hier ist //script[contains(.,"customfunction_div")]
ein XPath-Ausdruck, der die script
Tags packt mit Inhalt (.
) mit customfunction_div.
Wenn Sie auf einem regulären Ausdruck bestehen, das '~<script\b(?:(?!</?script[\s>]).)*customfunction_div.*?</script>~s'
Muster sollte in den meisten Fällen für Sie arbeiten (wie es jede <script
offenen Tag entsprechen wird, werden alle Sequenzen, die nicht mit <script
oder </script
beginnen (siehe (?:(?!</?script[\s>]).)*
) und dann erforderlichen Wert und dann 0+ Zeichen bis zum ersten </script>
), aber denken Sie daran, dass Regex nicht das richtige Werkzeug ist, um HTML zu manipulieren. Verwenden Sie es nur als Ausweichlösung, wenn Sie beschädigtes HTML erhalten.
Versuchen Sie https://ideone.com/84eH8f, siehe [die Regex-Demo] (https://regex101.com/r/dS1xR7/2) –