PHP Handbuch
Zurück |  | Weiter

# preg_match_all

(PHP 3 >= 3.0.9, PHP 4, PHP 5)

preg_match_all -- Führt eine umfassende Suche nach Übereinstimmungen mit regulärem Ausdruck durch

## Beschreibung

int preg_match_all ( string Suchmuster, string Zeichenkette, array &Treffer [, int Flags [, int Versatz]] )

Durchsucht `Zeichenkette` nach allen Übereinstimmungen mit dem in `Suchmuster` angegebenen regulären Ausdruck und legt sie in der durch `Flags` festgelegten Reihenfolge in `Treffer` ab.

Nachdem die erste Übereinstimmung gefunden wurde, wird die nachfolgende Suche jeweils am Ende der letzten Übereinstimmung fortgesetzt.

## Parameter Liste

`Suchmuster`

  Der Ausdruck nach dem gesucht werden soll als Zeichenkette

`Zeichenkette`

  Die zu durchsuchende Zeichenkette

`matches`

  In diesem Fall ist $treffer[0] der erste Satz von Übereinstimmungen und `$treffer[0][0]` enthält den Text, der auf das komplette Suchmuster passt, `$treffer[0][1]` den Text, der auf das erste Teilsuchmuster passt und so weiter. Auf die gleiche Weise ist `$treffer[1]` der zweite Satz von Übereinstimmungen etc.

`Flags`

  Kann eine Kombination folgender Flags sein (beachten Sie, dass es keinen Sinn hat, `PREG_PATTERN_ORDER` zusammen mit `PREG_SET_ORDER` zu verwenden):

  `PREG_PATTERN_ORDER`

    Ordnet die Ergebnisse so an, dass $treffer[0] ein Array von Übereinstimmungen mit dem kompletten Suchmuster ist, $treffer[1] ein Array von Zeichenketten, die auf das erste eingeklammerte Teilsuchmuster passen und so weiter.

    `<?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>Beispiel: </b><div align=left>das ist ein Test</div>", $ausgabe, PREG_PATTERN_ORDER); echo $ausgabe[0][0] . ", " . $ausgabe[0][1] . "\n"; echo $ausgabe[1][0] . ", " . $ausgabe[1][1] . "\n"; ?>`

    Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

        <b>Beispiel: </b>, <div align=left>das ist ein Test</div>
        Beispiel: , das ist ein Test

    Also enthält $ausgabe[0] ein Array von Zeichenketten, die auf das komplette Suchmuster passen und $ausgabe[1] ein Array von Zeichenketten, die sich zwischen Tags befinden.

  `PREG_SET_ORDER`

    Ordnet die Ergebnisse so an, dass $treffer[0] ein Array aus dem ersten Satz von Übereinstimmungen ist, $treffer[1] ein Array aus dem zweiten Satz von Übereinstimmungen und so weiter.

    `<?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>Beispiel: </b><div align=\"left\">das ist ein Test</div>", $ausgabe, PREG_SET_ORDER); echo $ausgabe[0][0] . ", " . $ausgabe[0][1] . "\n"; echo $ausgabe[1][0] . ", " . $ausgabe[1][1] . "\n"; ?>`

    Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

        <b>Beispiel: </b>, Beispiel:
        <div align="left">das ist ein Test</div>, das ist ein Test

  `PREG_OFFSET_CAPTURE`

    Wenn dieses Flag gesetzt ist, wird mit jeder gefundenen Übereinstimmung der dazugehörige Versatz in der Zeichenkette zurückgegeben. Beachten Sie, dass dies den Wert von `Treffer` in einem Array dahingehend ändert, dass jedes Element ein Array ist, das aus der übereinstimmenden Zeichenkette als Element `0` und deren Stelle in `Zeichenkette` als Element `1` besteht.

  Falls kein Flag für die Anordnung angegeben wurde, wird `PREG_PATTERN_ORDER` angenommen.

`Versatz`

  Normalerweise beginnt die Suche am Anfang der Zeichenkette. Der optionale Parameter `Versatz` kann verwendet werden, um eine andere Stelle anzugeben, ab der gesucht werden soll.

  > Anmerkung: Die Verwendung von `Versatz` entspricht nicht der Übergabe von `substr($zeichenkette, $versatz)` an Stelle der Zeichenkette an preg_match_all(), weil `Suchmuster` Angaben wie zum Beispiel ^, $ oder (?<=x) enthalten kann. Für Beispiele siehe preg_match().

## Rückgabewerte

Gibt die Anzahl der Übereinstimmungen mit dem kompletten Suchmuster zurück (die auch Null sein kann) oder `FALSE`, falls ein Fehler auftrat.

## ChangeLog

Version | Beschreibung
--- | ---
4.3.3 | Den Parameter `Versatz` hinzugefügt
4.3.0 | Das Flag `PREG_OFFSET_CAPTURE` hinzugefügt

## Beispiele

Beispiel 1. Alle Telefonnummern aus einem Text holen.
`<?php preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", "Wählen Sie 555-1212 oder 1-800-555-1212", $telefon); ?>`

Beispiel 2. Zusammen gehörende HTML-Tags finden (gierig)
`<?php // Das \\2 ist ein Beispiel für Rückreferenzierung. Es teilt pcre mit, dass // der reguläre Ausdruck auf den für das zweite Klammerpaar gefundenen // Ausdruck selbst, also in diesem Fall auf den für ([\w]+) gefundenen // Ausdruck passen muss. // Der zusätzliche Backslash wird wegen der doppelten Anführungsstriche // benötigt. $html = "<b>fett gedruckter Text</b><a href=howdy.html>klick mich an</a>"; preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $treffer, PREG_SET_ORDER); foreach ($treffer as $wert) { echo "gefunden: " . $wert[0] . "\n"; echo "Teil 1: " . $wert[1] . "\n"; echo "Teil 2: " . $wert[3] . "\n"; echo "Teil 3: " . $wert[4] . "\n\n"; } ?>`
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
    gefunden: <b>fett gedruckter Text</b>
    Teil 1: <b>
    Teil 2: fett gedruckter Text
    Teil 3: </b>

    gefunden: <a href=howdy.html>klick mich an</a>
    Teil 1: <a href=howdy.html>
    Teil 2: klick mich an
    Teil 3: </a>

## Siehe auch

preg_match()
preg_replace()
preg_split()

Zurück | Zum Anfang | Weiter
preg_last_error | Nach oben | preg_match