Benutzer-Werkzeuge

Webseiten-Werkzeuge


php:preg

Reguläre Ausdrücke

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

$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"
}

Erläuterung des regulären Ausdrucks

/Chrome\/(?P<Version>[0-9.]{1,})/

AusdruckBedeutung
/Muster-Begrenzungszeichen am Anfang
ChromeDas 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.

Beispieltext, der gefiltert werden soll

Beispieltext.txt
Die Bearbeitungsgebühr vom Lotto 6aus49 ist abhängig von der zuständigen
Landeslotteriegesellschaft sowie von der Anzahl der teilnehmenden Wochen
und bewegt sich zwischen 0,20 Euro und 1,50 Euro pro Spielschein.
 
Im Bundesland Saarland ist die Teilnahme mit einer Bearbeitungsgebühr
bis zu 1,50 Euro am teuersten. Somit kann ein komplett ausgefüllter Spielschein
mit 5 Wochen Laufzeit für mittwochs und samstags inkl. Spiel 77, Super 6 und
Glücksspirale maximal 184 Euro kosten.
 
Für die Teilnahme an der Glücksspirale werden von einigen
Landeslotteriegesellschaften noch eine zusätzliche Bearbeitungsgebühr
zwischen 0,20 € bis 0,60 € berechnet.

PHP-Klasse

class TextFilter
{
    private $content;
 
    public function loadFile( $filename ) {
 
        if( !file_exists( $filename ) )
            return false;
 
        $this->content = file_get_contents( $filename );
        return true;
    }
 
    public function getArray( $pattern ) {
 
        if( empty ( $pattern ))
            return false;
 
        preg_match_all( $pattern, $this->content, $result );
 
        if( count( $result ) > 0 )
            return $result[0];
    }
}

Aufruf der Methoden der PHP-Klasse

$filter = new TextFilter();
 
if( $filter->loadFile( "Beispieltext.txt" ) )
    $result = $filter->getArray( '/\s\d{1,},?\d{0,2}\s(Euro|€)/' );
 
print_r( $result );

Erläuterung des regulären Ausdrucks

/\s\d{1,},?\d{0,2}\s(Euro|€)/

AusdruckBedeutung
/Muster-Begrenzungszeichen am Anfang
\sLeerzeichen
\dbeliebige Ziffer zwischen 0-9
{1,}die vorangestellte Zahl muss mindestens einmal und darf beliebig oft vorkommen
,Komma (Trennzeichen zwischen Euro und Cent)
?Das vorangestellte Komma ist optional (darf, aber muss nicht vorkommen)
\dbeliebige Ziffer zwischen 0-9
{0,2}die vorangestellte Ziffer muss gar nicht und darf max. zweimal vorkommen
\sLeerzeichen
(Euro €)Es muss das Wort „Euro“ oder das „€“-Zeichen vorkommen
/Muster-Begrenzungszeichen am Ende

Beispiel 3: src aus Image-Tag extrahieren

if( preg_match( '/src=[\"\']([^\"\']+)/', $imgTag, $result ) )
{
     $src = $result[1];
}

php/preg.txt · Zuletzt geändert: 2020/10/05 10:18 von webproducer