preg_last_error
preg_match
PCRE-Funktionen
PHP Manual

# preg_match_all

(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`

  Ein mehrdimensionales Array mit allen gefundenen Übereinstimmungen, das den `Flags` entsprechend sortiert ist.

`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 in Bytes anzugeben, ab der gesucht werden soll.

  > Hinweis: 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>

Beispiel #3 Benannte Teilsuchmuster (named subpatterns)

`<?php
$str = <<<FOO
a: 1
b: 2
c: 3
FOO;
preg_match_all('/(?<name>\w+): (?<zahl>\d+)/', $str, $treffer);
print_r($treffer);
?>`

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

    Array
    (
        [0] => Array
            (
                [0] => a: 1
                [1] => b: 2
                [2] => c: 3
            )

        [name] => Array
            (
                [0] => a
                [1] => b
                [2] => c
            )

        [1] => Array
            (
                [0] => a
                [1] => b
                [2] => c
            )

        [zahl] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )

        [2] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )

    )

### Siehe auch

- preg_match()
- preg_replace()
- preg_split()

preg_last_error
preg_match
PCRE-Funktionen
PHP Manual