(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 17%
Ich brauche keine Regular Expressions 0%

4 Antworten

Vom Beitragsersteller 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 sehr nützlich wenn man es drauf hat

Bei dem Tag

wirst Du eher preg_match_all (http://php.net/manual/de/function.preg-match-all.php) benötigen, da preg_match bei der ersten Übereinstimmung die Suche beendet und es sicher mehrere gibt.
Regular Expressions sind sehr nützlich wenn man es drauf hat

Hier ein kleiner Code der den TITLE einer Seite ausliest - leite es einfach ab! Ersetze <title></title> mit <li></li>

$content = @file_get_contents("http://www.test.de");

$preg_one = preg_match("!<title>(.*?)</title>!", $content, $ergebnis);

echo $ergebnis[1];

comod 
Beitragsersteller
 17.03.2010, 18:48

ja der title steht meistens in einer zeile. was ist wenn der content so aussieht:

<p><title>Hallo\n Das Ist\n Völliger Schwachsinn</title></p>

Also Ich komme jetzt mit $regex = '/<li(.+?)>(.+?)<\/li>/is'; ganz gut aus!

0
yerooke  17.03.2010, 20:18
@comod

Egal, der Code Filtert nur das Heraus was zwischen der ersten Kombinatio steht und der zweiten, vollkommen unabhängig was davor oder danach steht!

0