2016-08-09 15 views
0

Ich versuche, eine Regex, die alles zwischen diesen h4-Tags findet. Also brauche ich ein Array, das zwei Absätze im ersten Element, eins im zweiten, drei im dritten und so weiter enthält. Es kann alle Arten von HTML zwischen den h4 Tags geben.PHP-Regex zum Ausschneiden alles zwischen definierten Tags

Die folgende funktioniert nicht.

$a = preg_match_all("#<h4>(.*?)</p>.*?<h4>#s", $description, $m); 

<h4>Lorem ipsum </h4> 
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> 
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> 
<h4>Lorem ipsum </h4> 
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> 
<h4>Lorem ipsum </h4> 
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> 
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> 
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> 
<h4>Lorem ipsum </h4> 
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> 
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> 
+1

[Regexes nicht für das Analysieren von HTML verwenden] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) –

+0

Sie muss aufhören und [lesen Sie, warum die Verwendung von Regex so ist eine schlechte Idee] (http://stackoverflow.com/questions/6751105/why-its-its-not-possible-to-use-regex-to-parse-html-xml -a-formale Erklärung-in-la). Wenn das dich nicht überzeugt [vielleicht wird das] (http://stackoverflow.com/a/1732454/2370483) – Machavity

+0

Nun, es ist sicher, dass es h4 Tags geben wird und ich brauche nur den Text dazwischen. – Mike

Antwort

1
$subject = "Your HTML"; //replace with actual HTML 
$pattern = "/<\\/h4>(((?!<h4>).)*)/mis"; 
preg_match_all($pattern, $subject, $matches); 

$matches ist dann ein Array von Arrays gesamten Text zwischen h4 Tags global gefunden enthält.

+0

alltoug https://regex101.com/ r/aV7mQ4/1 hat Probleme damit, es funktioniert auf meiner Seite. – Mike

+0

Das liegt daran, dass wir für PHP den ersten Backslash umgehen müssen und den Modifikator 'g' durch einen Aufruf von' prep_match_all' ersetzen müssen. Hier ist ein Link zu regex 101 mit diesem eingerichtet: https://regex101.com/r/vC1vU4/1 – Lew

Verwandte Themen