preg_match

(PHP 4, PHP 5, PHP 7, PHP 8)

preg_matchFührt eine Suche mit einem regulären Ausdruck durch

Beschreibung

preg_match(
    string $pattern,
    string $subject,
    array &$matches = null,
    int $flags = 0,
    int $offset = 0
): int|false

Durchsucht subject nach Übereinstimmungen mit dem in pattern angegebenen regulären Ausdruck.

Parameter-Liste

pattern

Der Ausdruck, nach dem gesucht werden soll, als Zeichenkette.

subject

Die zu durchsuchende Zeichenkette.

matches

Falls der Parameter matches angegeben wurde, wird er mit den Suchergebnissen gefüllt. $matches[0] enthält dann den Text, der auf das komplette Suchmuster passt, $matches[1] den Text, der auf das erste eingeklammerte Teilsuchmuster passt und so weiter.

flags

flags kann eine Kombination der folgenden Flags sein:

PREG_OFFSET_CAPTURE

Wenn dieses Flag gesetzt ist, wird mit jeder gefundenen Übereinstimmung die dazugehörige Position in der Zeichenkette (in Bytes) zurückgegeben. Zu beachten ist, dass dies den Wert von matches in ein Array ändert, in dem jedes Element ein Array ist, das aus der übereinstimmenden Zeichenkette als Element 0 und deren Stelle in subject als Element 1 besteht.

<?php
preg_match
('/(foo)(bar)(baz)/''foobarbaz'$matchesPREG_OFFSET_CAPTURE);
print_r($matches);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [0] => Array
        (
            [0] => foobarbaz
            [1] => 0
        )

    [1] => Array
        (
            [0] => foo
            [1] => 0
        )

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

    [3] => Array
        (
            [0] => baz
            [1] => 6
        )

)

PREG_UNMATCHED_AS_NULL

Wird dieses Flag angegeben, werden nicht gefundene Teilsuchmuster als null zurückgegeben; andernfalls werden sie als eine leere Zeichenkette (String) zurückgegeben.

<?php
preg_match
('/(a)(b)*(c)/''ac'$matches);
var_dump($matches);
preg_match('/(a)(b)*(c)/''ac'$matchesPREG_UNMATCHED_AS_NULL);
var_dump($matches);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

array(4) {
  [0]=>
  string(2) "ac"
  [1]=>
  string(1) "a"
  [2]=>
  string(0) ""
  [3]=>
  string(1) "c"
}
array(4) {
  [0]=>
  string(2) "ac"
  [1]=>
  string(1) "a"
  [2]=>
  NULL
  [3]=>
  string(1) "c"
}

offset

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

Hinweis:

Die Verwendung von offset entspricht nicht der Übergabe von substr($subject, $offset) an Stelle der Zeichenkette an preg_match(), weil pattern Angaben wie ^, $ oder (?<=x) enthalten kann. Vergleiche:

<?php
$zeichenkette 
"abcdef";
$suchmuster '/^def/';
preg_match($suchmuster$zeichenkette$trefferPREG_OFFSET_CAPTURE3);
print_r($treffer);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
)

während dieses Beispiel

<?php
$zeichenkette 
"abcdef";
$suchmuster '/^def/';
preg_match($suchmustersubstr($zeichenkette,3), $trefferPREG_OFFSET_CAPTURE);
print_r($treffer);
?>

folgende Ausgabe erzeugt

Array
(
    [0] => Array
        (
            [0] => def
            [1] => 0
        )
)

Als Alternative, um die Verwendung von substr() zu vermeiden, kann die Assertion \G statt des Ankers ^ verwendet werden, oder stattdessen der Modifikator A; beide funktionieren in Kombination mit dem Parameter offset.

Rückgabewerte

preg_match() gibt 1 zurück, falls eine Übereinstimmung zwischen pattern und subject gefunden wurde, 0, falls nicht. Bei einem Fehler wird false zurückgegeben.

Warnung

Diese Funktion kann sowohl das boolsche false zurückliefern, als auch einen nicht-boolschen Wert, welcher zu false ausgewertet wird. Weitere Informationen entnehmen Sie bitte dem Abschnitt über die boolschen Typen. Benutzen Sie deshalb den === Operator, um den Rückgabewert dieser Funktion zu überprüfen.

Fehler/Exceptions

Wenn das übergebene Regex-Muster nicht zu einem gültigen Regex kompiliert werden kann, wird ein Fehler der Stufe E_WARNING ausgegeben.

Changelog

Version Beschreibung
7.2.0 Beim Parameter $flags wird nun die Konstante PREG_UNMATCHED_AS_NULL unterstützt.

Beispiele

Beispiel #1 Die Zeichenkette "php" finden

<?php
// Das "i" nach der Suchmuster-Begrenzung kennzeichnet eine Suche ohne
// Berücksichtigung von Groß- und Kleinschreibung
if (preg_match("/php/i""PHP ist die Web-Skriptsprache der Wahl.")) {
    echo 
"Es wurde eine Übereinstimmung gefunden.";
} else {
    echo 
"Es wurde keine Übereinstimmung gefunden.";
}
?>

Beispiel #2 Die Zeichenkette "web" finden

<?php
// Das \b im Suchmuster kennzeichnet eine Wortgrenze, weshalb nur eine
// Übereinstimmung mit der einzelnen Zeichenkette "web" gefunden wird und
// nicht ein Teilwort in "webbing" oder "cobweb"
if (preg_match("/\bweb\b/i""Für das Web ist PHP die Skriptsprache der Wahl.")) {
    echo 
"Es wurde eine Übereinstimmung gefunden.";
} else {
    echo 
"Es wurde keine Übereinstimmung gefunden.";
}

if (
preg_match("/\bweb\b/i""PHP ist die Web-Skriptsprache der Wahl.")) {
    echo 
"Es wurde eine Übereinstimmung gefunden.";
} else {
    echo 
"Es wurde keine Übereinstimmung gefunden.";
}
?>

Beispiel #3 Den Domänen-Namen aus einer URL holen

<?php
// den Hostnamen aus URL holen
preg_match('@^(?:http://)?([^/]+)@i',
    
"http://www.php.net/index.html"$treffer);
$host $treffer[1];

// die letzten beiden Segmente aus Hostnamen holen
preg_match('/[^.]+\.[^.]+$/'$host$treffer);
echo 
"Der Domänen-Name lautet: {$treffer[0]}\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Der Domänen-Name lautet: php.net

Beispiel #4 Benannte Teilsuchmuster (named subpatterns)

<?php

$str 
'foobar: 2008';

preg_match('/(?P<name>\w+): (?P<zahl>\d+)/'$str$treffer);

/* Alternative */
// preg_match('/(?<name>\w+): (?<zahl>\d+)/', $str, $treffer);

print_r($treffer);

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [0] => foobar: 2008
    [name] => foobar
    [1] => foobar
    [zahl] => 2008
    [2] => 2008
)

Anmerkungen

Tipp

Verwenden Sie nicht preg_match(), wenn Sie nur überprüfen wollen, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist. Verwenden Sie dafür stattdessen die Funktion strpos(), die das schneller erledigt.

Siehe auch

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

How to overcome Safari's iframe cookie block?

To overcome Safari's iframe cookie block, you can use the SameSite=None; Secure cookie attribute in conjunction with a third-party domain that sup ...

Geschrieben von Joniemartinez am 21.12.2024 13:28:24
Forum: HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
Probleme mit speichern in Datenbank in französisch

Les erreurs fréquentes lors de l'enregistrement de données dans une base de données incluent des problèmes de connexion, des erreurs de syntax ...

Geschrieben von Alice12 am 18.12.2024 05:07:21
Forum: PHP Developer Forum
Gibt es eine API zum Abrufen von PHP-Code-Referenzen?

PHP.net bietet eine umfassende Online-Dokumentation für PHP. Es gibt keine offizielle API zum Abrufen von PHP-Dokumentationen direkt, aber du kan ...

Geschrieben von Alice12 am 18.12.2024 05:03:27
Forum: PHP Developer Forum
Ein data POST via Curl funktioniert nicht.

It looks like your PHP cURL request isn't working because you're not properly setting the CURLOPT_CUSTOMREQUEST option; it should be a string, so ...

Geschrieben von noah1600 am 16.12.2024 04:16:13
Forum: PHP Developer Forum