Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
php:preg [2016/05/10 07:43] webproducer angelegt |
php:preg [2020/10/05 10:18] (aktuell) webproducer Beispiel 3 ergänzt |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Reguläre Ausdrücke (preg_match) ====== | + | ====== Reguläre Ausdrücke ====== |
- | ===== Aufgabe ===== | + | ===== Beispiel 1: preg_match ===== |
+ | |||
+ | ==== Aufgabe ==== | ||
+ | |||
+ | Aus dem Ergebnis des Aufrufs der JavaScript-Funktion "navigator.appVersion" im Browser Google Chrome soll die Versionsnummer herausfiltert werden. | ||
+ | |||
+ | ==== PHP-Code ==== | ||
+ | |||
+ | <code php> | ||
+ | $appVersion = "5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"; | ||
+ | |||
+ | if( preg_match( '/Chrome\/(?P<Version>[0-9.]{1,})/', $appVersion, $result ) ) | ||
+ | { | ||
+ | echo $result[2]; // Ergebnis: "57.0.2987.133" | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ==== Erläuterung des regulären Ausdrucks ==== | ||
+ | |||
+ | ///Chrome\/(?P<Version>[0-9.]{1,})/// | ||
+ | |||
+ | ^Ausdruck^Bedeutung^ | ||
+ | |/|Muster-Begrenzungszeichen am Anfang| | ||
+ | |Chrome|Das Wort "Chrome"| | ||
+ | |\/|das escapte "Slash"-Zeichen hinter dem Wort "Chrome"| | ||
+ | |(|Beginn des Teilsuchmusters| | ||
+ | |?P<Version>|Teilsuchmuster mit dem Namen "Version" benannt| | ||
+ | |[0-9.]|Alle Ziffern von 0 bis 9 inklusive Punkt| | ||
+ | |{1,}|die vorangestellten Zeichen müssen mindestens einmal und dürfen beliebig oft vorkommen| | ||
+ | |)|Ende des Teilsuchmusters| | ||
+ | |/|Muster-Begrenzungszeichen am Ende| | ||
+ | |||
+ | //Erläuterung:// Die PHP-Funktion "preg_match" sucht nach der ersten Übereinstimmung und gibt im Erfolgsfall "true" zurück. Daher ist das Ergebnis nicht im Rückgabewert der Funktion, sondern im 3. Parameter ("$result") zu finden. Durch die Klammersetzung werden zwei Gruppen erstellt. Deshalb enthält das Ergebnis-Array drei Einträge: | ||
+ | |||
+ | * $result[0] = gesamtes Suchmuster: "Chrome/57.0.2987.133" | ||
+ | * $result[version] = abgegrenztes, benanntes Teilsuchmuster: "57.0.2987.133" | ||
+ | * $result[1] = abgegrenztes, unbenanntes Teilsuchmuster: "57.0.2987.133" | ||
+ | |||
+ | Somit können wir durch die Gruppierung unser gewünschtes Ergebnis in $result[version] finden. | ||
+ | |||
+ | Wenn die Suche nach der ersten Übereinstimmung fortgesetzt werden soll, ist die Funktion "preg_match_all" (siehe Beispiel 2) zu verwenden. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Beispiel 2: preg_match_all ===== | ||
+ | |||
+ | ==== Aufgabe ==== | ||
Wir wollen aus dem unten stehenden Beispieltext alle Euro-Beträge, die durch das nachstehende Wort "Euro" oder mit dem Eurozeichen "€" gekennzeichnet sind, herausfiltern. | Wir wollen aus dem unten stehenden Beispieltext alle Euro-Beträge, die durch das nachstehende Wort "Euro" oder mit dem Eurozeichen "€" gekennzeichnet sind, herausfiltern. | ||
- | ===== Beispieltext, der gefiltert werden soll ===== | + | ==== Beispieltext, der gefiltert werden soll ==== |
<code txt Beispieltext.txt> | <code txt Beispieltext.txt> | ||
Zeile 22: | Zeile 68: | ||
</code> | </code> | ||
- | ===== PHP-Klasse ===== | + | ==== PHP-Klasse ==== |
<code php> | <code php> | ||
Zeile 51: | Zeile 97: | ||
</code> | </code> | ||
- | ===== Aufruf der Methoden der PHP-Klasse ===== | + | ==== Aufruf der Methoden der PHP-Klasse ===== |
<code php> | <code php> | ||
Zeile 62: | Zeile 108: | ||
</code> | </code> | ||
- | ===== Erläuterung des regulären Ausdrucks '/\s\d{1,},?\d{0,2}\s(Euro|€)/'===== | + | ==== Erläuterung des regulären Ausdrucks ==== |
+ | |||
+ | ///\s\d{1,},?\d{0,2}\s(Euro|€)/// | ||
^Ausdruck^Bedeutung^ | ^Ausdruck^Bedeutung^ | ||
|/|Muster-Begrenzungszeichen am Anfang| | |/|Muster-Begrenzungszeichen am Anfang| | ||
- | |/s|Leerzeichen| | + | |\s|Leerzeichen| |
- | |/d|beliebige Ziffer zwischen 0-9| | + | |\d|beliebige Ziffer zwischen 0-9| |
|{1,}|die vorangestellte Zahl muss mindestens einmal und darf beliebig oft vorkommen| | |{1,}|die vorangestellte Zahl muss mindestens einmal und darf beliebig oft vorkommen| | ||
|,|Komma (Trennzeichen zwischen Euro und Cent)| | |,|Komma (Trennzeichen zwischen Euro und Cent)| | ||
|?|Das vorangestellte Komma ist optional (darf, aber muss nicht vorkommen)| | |?|Das vorangestellte Komma ist optional (darf, aber muss nicht vorkommen)| | ||
- | |/d|beliebige Ziffer zwischen 0-9| | + | |\d|beliebige Ziffer zwischen 0-9| |
|{0,2}|die vorangestellte Ziffer muss gar nicht und darf max. zweimal vorkommen| | |{0,2}|die vorangestellte Ziffer muss gar nicht und darf max. zweimal vorkommen| | ||
- | |/s|Leerzeichen| | + | |\s|Leerzeichen| |
|(Euro €)|Es muss das Wort "Euro" oder das "€"-Zeichen vorkommen| | |(Euro €)|Es muss das Wort "Euro" oder das "€"-Zeichen vorkommen| | ||
|/|Muster-Begrenzungszeichen am Ende| | |/|Muster-Begrenzungszeichen am Ende| | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Beispiel 3: src aus Image-Tag extrahieren ===== | ||
+ | |||
+ | <code php> | ||
+ | if( preg_match( '/src=[\"\']([^\"\']+)/', $imgTag, $result ) ) | ||
+ | { | ||
+ | $src = $result[1]; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Weiterführende Links ===== | ||
+ | |||
+ | * [[http://regexr.com/|Online Ausdrucks-Editor mit Echtzeitprüfung]] | ||
+ | * [[https://danielfett.de/2006/03/20/regulaere-ausdruecke-tutorial/|Super Tutorial mit praktischen Beispielen!]] | ||
+ | * [[http://webdesign.tepelmann.com/PHP_Beispiele_fuer_Regulaere_Ausdruecke.html#Jahreszahl|PHP-Beispiele für Reguläre Ausdrücke]] |