Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Both sides previous revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
php:preg [2017/04/18 17:55] webproducer Zweites Beispiel hinzugefügt |
php:preg [2020/10/05 10:18] (aktuell) webproducer Beispiel 3 ergänzt |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Reguläre Ausdrücke mit preg_match ====== | + | ====== Reguläre Ausdrücke ====== |
- | ===== Beispiel 1 ===== | + | ===== Beispiel 1: preg_match ===== |
==== Aufgabe ==== | ==== Aufgabe ==== | ||
- | Wir wollen aus dem Ergebnis des Aufrufs der JavaScript-Funktion "navigator.appVersion" im Browser Google Chrome die Versionsnummer herausfiltern. | + | Aus dem Ergebnis des Aufrufs der JavaScript-Funktion "navigator.appVersion" im Browser Google Chrome soll die Versionsnummer herausfiltert werden. |
==== PHP-Code ==== | ==== PHP-Code ==== | ||
Zeile 12: | Zeile 12: | ||
$appVersion = "5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"; | $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\/[0-9.]{1,}/', $appVersion, $result ) ) | + | if( preg_match( '/Chrome\/(?P<Version>[0-9.]{1,})/', $appVersion, $result ) ) |
{ | { | ||
- | echo $result[0]; // Ergebnis: "Chrome/57.0.2987.133" | + | echo $result[2]; // Ergebnis: "57.0.2987.133" |
} | } | ||
</code> | </code> | ||
==== Erläuterung des regulären Ausdrucks ==== | ==== Erläuterung des regulären Ausdrucks ==== | ||
+ | |||
+ | ///Chrome\/(?P<Version>[0-9.]{1,})/// | ||
^Ausdruck^Bedeutung^ | ^Ausdruck^Bedeutung^ | ||
Zeile 24: | Zeile 26: | ||
|Chrome|Das Wort "Chrome"| | |Chrome|Das Wort "Chrome"| | ||
|\/|das escapte "Slash"-Zeichen hinter dem 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| | |[0-9.]|Alle Ziffern von 0 bis 9 inklusive Punkt| | ||
- | |{1,}|das Vorangestellte Zeichen muss mindestens einmal und darf beliebig oft vorkommen| | + | |{1,}|die vorangestellten Zeichen müssen mindestens einmal und dürfen beliebig oft vorkommen| |
+ | |)|Ende des Teilsuchmusters| | ||
|/|Muster-Begrenzungszeichen am Ende| | |/|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 ===== | + | ===== Beispiel 2: preg_match_all ===== |
==== Aufgabe ==== | ==== Aufgabe ==== | ||
Zeile 93: | 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^ | ||
Zeile 107: | Zeile 124: | ||
|(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> | ||
---- | ---- | ||
Zeile 113: | Zeile 141: | ||
* [[http://regexr.com/|Online Ausdrucks-Editor mit Echtzeitprüfung]] | * [[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]] | * [[http://webdesign.tepelmann.com/PHP_Beispiele_fuer_Regulaere_Ausdruecke.html#Jahreszahl|PHP-Beispiele für Reguläre Ausdrücke]] |