(PHP) regex: alles auslesen zwischen <li> und </li>

Das Ergebnis basiert auf 6 Abstimmungen

Regular Expressions sind sehr nützlich wenn man es drauf hat 83%
Regular Expressions sind viel zu kompliziert 16%
Ich brauche keine Regular Expressions 0%

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Regular Expressions sind sehr nützlich wenn man es drauf hat
preg_match_all("#<li(.*)>(.*)<\/li>#", $dein_string, $output_as_array);

print_r($output_as_array);

> "#<li(.)>(.)<\/li>#"

Normalerweise sind reguläre Ausdrücke gierig, (greedy) bei diesem Ausdruck würde ich annehmen, daß der Ausdruck alles nach <li bis zum Zeilenende "frißt".

Sinnvolle Modifier: U: Ungreedy: möglichst wenig - irgendwelche Zeichen - suchen

s: . matcht auch auf Zeilenende. Ein Zeilende könnte ja in dem <li> Tag vorkommen.

Besser also: "#<li(.)>(.)<\/li>#Us"

Ich würde allerdings eine Negation bevorzugen: '~<li>([^<]+)</li>~'

Also 1 oder mehr Zeichen, die nicht in den eckigen Klammern vorkommen. Zirkumflex vorangestellt, negiert den Inhalt der Klammern.

Hoffe, es wird richtig angezeigt :D Viel Spaß!

Regular Expressions sind viel zu kompliziert

Sorry die Sternchen sieht man nicht dann nehmen wir halt die #

<#li#>#(.+?)#<#/li#>

Was möchtest Du wissen?