Im Folgenden finden Sie eine Sammlung gängiger Funktionscodes für reguläre Ausdrücke in PHP, um das Erlernen des regulären PHP-Ausdrucks
preg_grep zu erleichtern.
(PHP 4, PHP 5)
preg_grep – Gibt Array-Zellenbeschreibungen zurück, die mit dem Muster übereinstimmen
array preg_grep ( string pattern, array input [, int flags] )
preg_grep() Gibt ein Array zurück, das die Zellen im Eingabearray enthält, die dem angegebenen Muster entsprechen.
Flags können die folgenden Flags sein:
PREG_GREP_INVERT
Wenn dieses Flag übergeben wird, gibt preg_grep() Zellen im Eingabearray zurück, die nicht mit dem angegebenen Muster übereinstimmen. Dieses Tag ist seit PHP 4.2.0 verfügbar.
Ab PHP 4.0.4 werden die von preg_grep() zurückgegebenen Ergebnisse mithilfe der Schlüssel aus dem Eingabearray indiziert. Wenn Sie solche Ergebnisse nicht wünschen, verwenden Sie array_values(), um die von preg_grep() zurückgegebenen Ergebnisse neu zu indizieren.
Das Obige ist die Beschreibung von preg_grep() im Handbuch. Erstens ist dies eine Perl-kompatible reguläre Funktion, daher bedeutet preg_grep vermutlich p(perl)reg(regular)_grep. Seine Besonderheit besteht darin, dass es durch seine eigene Erweiterung für reguläre Zwecke verwendet werden kann Übereinstimmung in mehrdimensionalen Arrays, und es kann über den Flags-Parameter ein übereinstimmendes oder nicht übereinstimmendes Array zurückgeben. Seine Effizienz ist viel schneller als die Verwendung der foreach(...){if...}-Struktur (nicht überprüft) und es kann komplexe Muster abgleichen. Es ist von großem Nutzen bei Anwendungen wie Suchen und Sortieren.
Beispiel:
<?
$arr = array('abc'=>12.213,'bb'=>12345,'ba'=>23.2321,34.3,'23'=>'3.3','23434'=>'bbb');
// Alle Array-Elemente zurückgeben, die Gleitkommazahlen enthalten.
$fl_array = preg_grep ("/^(d+)?.d+$/", $arr);
print_r($fl_array);
?>
preg_match
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match – Anweisungen zum Vergleich regulärer Ausdrücke
int preg_match (String-Muster, String-Subjekt [, Array-Matches [, Int-Flags]])
durchsucht die Betreff-Zeichenfolge nach Inhalten, die mit dem durch Muster angegebenen regulären Ausdruck übereinstimmen.
Wenn Übereinstimmungen vorliegen, wird es mit den Ergebnissen der Suche gefüllt. $matches[0] enthält Text, der mit dem gesamten Muster übereinstimmt, $matches[1] enthält Text, der mit dem ersten erfassten Untermuster in Klammern übereinstimmt, und so weiter.
Flags können die folgenden Flags sein:
PREG_OFFSET_CAPTURE
Wenn dieses Flag gesetzt ist, wird bei jedem Vorkommen einer Übereinstimmung auch der zugehörige String-Offset zurückgegeben. Beachten Sie, dass dadurch der Wert des zurückgegebenen Arrays geändert wird, sodass jede darin enthaltene Zelle ebenfalls ein Array ist, wobei das erste Element die übereinstimmende Zeichenfolge und das zweite Element deren Offset ist. Dieses Tag ist seit PHP 4.3.0 verfügbar.
Der Flags-Parameter ist seit PHP 4.3.0 verfügbar.
preg_match() gibt die Anzahl der Musterübereinstimmungen zurück. Entweder 0 Mal (keine Übereinstimmung) oder 1 Mal, da preg_match() die Suche nach der ersten Übereinstimmung beendet. preg_match_all() hingegen sucht bis zum Ende des Betreffs. Wenn ein Fehler auftritt, gibt preg_match() FALSE zurück.
Tipp: Wenn Sie nur sehen möchten, ob eine Zeichenfolge in einer anderen Zeichenfolge enthalten ist, verwenden Sie preg_match() nicht. Sie können stattdessen strpos() oder strstr() verwenden, was viel schneller ist.
Das Obige ist die Beschreibung von preg_match() im Handbuch. Ich denke, die Funktion dieser Funktion besteht darin, dass sie zur Überprüfung verwendet werden kann, dh ob eine bestimmte Zeichenfolge bestimmte Anforderungen erfüllt. Die Einschränkung besteht darin, dass es, wie oben erwähnt, entweder 0 Mal oder 1 Mal zutrifft. Und der Rückgabewert ist die Anzahl der Übereinstimmungen. Wenn eine vollständige Übereinstimmung erforderlich ist, kann preg_match_all() verwendet werden. Erwähnenswert ist auch die Rolle des Arrays $matches, das als Rückgabewert des Selbstmusters verwendet werden kann, was manchmal nützlich ist.
Beispiel:
<?
if (preg_match ("/(bwebb)s(d)/i", "PHP ist die bevorzugte Web-45-Skriptsprache.,$match)) {
print „Es wurde eine Übereinstimmung gefunden.“;
print_r($match);
} anders {
print „Es wurde keine Übereinstimmung gefunden.“;
}
?>
<?php
// Hostnamen von URL abrufen
preg_match("/^(http://)?([^/]+)/i",
" http://www.php.net/index.html ", $matches);
$host = $matches[2];
// Die nächsten beiden Segmente vom Hostnamen abrufen
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "Domänenname ist: {$matches[0]}n";
?>
preg_match_all
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match_all – Führt einen globalen Vergleich regulärer Ausdrücke durch. Die Erklärung dieser Funktion im Handbuch ist sehr klar, daher werde ich sie nicht weiter erläutern.
veranschaulichen
int preg_match_all (String-Muster, String-Subjekt, Array-Matches [, int-Flags])
sucht nach allen Inhalten im Subjekt, die mit dem durch Muster angegebenen regulären Ausdruck übereinstimmen, und fügt die Ergebnisse in der durch Flags angegebenen Reihenfolge in Übereinstimmungen ein.
Nachdem die erste Übereinstimmung gefunden wurde, beginnen nachfolgende Suchvorgänge am Ende der vorherigen Übereinstimmung.
Flags können eine Kombination der folgenden Flags sein (beachten Sie, dass es keinen Sinn macht, PREG_PATTERN_ORDER und PREG_SET_ORDER zusammen zu verwenden):
PREG_PATTERN_ORDER
Sortieren Sie die Ergebnisse so, dass $matches[0] ein Array aller Musterübereinstimmungen ist, $matches[1] ein Array von Zeichenfolgen ist, die mit dem Untermuster in der ersten Klammer übereinstimmen, und so weiter.
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", "<b>Beispiel: </b><div align=left>das ist ein Test</div >",
$out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."n";
print $out[1][0].", ".$out[1][1]."n";
?>
Dieses Beispiel gibt Folgendes aus:
<b>Beispiel: </b>, <div align=left>das ist ein Test</div>
Beispiel: Dies ist ein Test.
Daher enthält $out[0] die Zeichenfolge, die dem gesamten Muster entspricht, und $out[1] enthält die Zeichenfolge zwischen einem Paar HTML-Tags.
PREG_SET_ORDER
Sortieren Sie die Ergebnisse so, dass $matches[0] das Array der ersten Übereinstimmungsmenge ist, $matches[1] das Array der zweiten Übereinstimmungsmenge ist und so weiter.
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
„<b>Beispiel: </b><div align=left>das ist ein Test</div>“,
$out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."n";
print $out[1][0].", ".$out[1][1]."n";
?>
Dieses Beispiel gibt Folgendes aus:
<b>Beispiel: </b>, Beispiel:
<div align=left>das ist ein Test</div>, das ist ein Test
In diesem Beispiel ist $matches[0] der erste Satz von Übereinstimmungsergebnissen, $matches[0][0] enthält den Text, der mit dem gesamten Muster übereinstimmt, und $matches[0][1] enthält den Text, der mit dem ersten Untermuster übereinstimmt , endend mit Und so weiter. Ebenso ist $matches[1] der zweite Satz von Übereinstimmungen und so weiter.
PREG_OFFSET_CAPTURE
Wenn dieses Flag gesetzt ist, wird bei jedem Vorkommen einer Übereinstimmung auch der zugehörige String-Offset zurückgegeben. Beachten Sie, dass dadurch der Wert des zurückgegebenen Arrays geändert wird, sodass jede Zelle auch ein Array ist, wobei das erste Element die übereinstimmende Zeichenfolge und das zweite Element deren Offset innerhalb des Betreffs ist. Dieses Tag ist seit PHP 4.3.0 verfügbar.
Wenn kein Tag angegeben ist, wird PREG_PATTERN_ORDER angenommen.
Gibt die Häufigkeit zurück, mit der das gesamte Muster abgeglichen wurde (möglicherweise Null), oder FALSE im Fehlerfall.
Beispiel 1. Alle Telefonnummern aus einer SMS abrufen
<?php
preg_match_all ("/(? (d{3})? )? (?(1) [-s] ) d{3}-d{4}/x",
„Rufen Sie 555-1212 oder 1-800-555-1212 an“, $phones);
?>
Beispiel 2. Suche nach passenden HTML-Tags (gierig)
<?php
// \2 ist ein Beispiel für eine umgekehrte Referenz, seine Bedeutung in PCRE ist
// Muss in diesem Fall mit dem Inhalt innerhalb des zweiten Satzes von Klammern im regulären Ausdruck selbst übereinstimmen
// Das ist ([w]+). Da die Zeichenfolge in doppelten Anführungszeichen steht, benötigen Sie
//Fügen Sie einen zusätzlichen Backslash hinzu.
$html = "<b>fetter Text</b><a href=howdy.html>klick mich</a>";
preg_match_all ("/(<([w]+)[^>]*>)(.*)(</\2>)/", $html, $matches);
for ($i=0; $i< count($matches[0]); $i++) {
echo "matched: ".$matches[0][$i]."n";
echo "Teil 1: ".$matches[1][$i]."n";
echo "Teil 2: ".$matches[3][$i].."n";
echo "Teil 3: ".$matches[4][$i]."nn";
}
?>
preg_quote
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_quote – Escape-Zeichenbeschreibung für reguläre Ausdrücke
string preg_quote ( string str [, string delimiter] )
preg_quote() verwendet str als Parameter und fügt vor jedem Zeichen, das zur regulären Ausdruckssyntax gehört, einen Backslash hinzu. Wenn Sie eine dynamisch generierte Zeichenfolge als Muster abgleichen müssen, können Sie diese Funktion verwenden, um die darin möglicherweise enthaltenen Sonderzeichen zu maskieren.
Wenn das optionale Argumenttrennzeichen angegeben wird, wird dieses Zeichen ebenfalls maskiert. Es kann verwendet werden, um das von der PCRE-Funktion benötigte Trennzeichen zu maskieren. Das am häufigsten verwendete Trennzeichen ist der Schrägstrich /.
Zu den Sonderzeichen für reguläre Ausdrücke gehören: . + * ? [ ^ ] $ ( ) = !
Hinweis: Diese Funktion kann sicher für Binärobjekte verwendet werden.
Das Obige ist die Erklärung im Handbuch, die sehr klar ist, daher werde ich nicht auf Details eingehen. Darüber hinaus gibt es im Handbuch einen Hinweis, dass diese Funktion sicher für Binärobjekte verwendet werden kann, was sehr nützlich ist.
Beispiel: Beispiel 1. Beispiel für preg_quote()
<?php
$keywords = '40 $ für ein g3/400';
$keywords = preg_quote($keywords, '/');
echo $keywords; // gibt $40 für einen g3/400 zurück
?>
Beispiel 2. Kursivschrift zu einem Wort in einem Text hinzufügen
<?php
// In diesem Beispiel wird preg_quote($word) verwendet, um das Sternchen aus dem regulären Ausdruck herauszuhalten
// Hat eine besondere Bedeutung.
$textbody = "Dieses Buch ist *sehr* schwer zu finden.";
$word = "*sehr*";
$textbody = preg_replace ("/".preg_quote($word)."/",
„<i>“.$word.“</i>“,
$textbody);
?>
Der nächste Schritt besteht darin, die Funktion preg_replace anzuwenden, die äußerst flexibel, äußerst leistungsstark und äußerst weit verbreitet ist.
preg_replace
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_replace – führt Such- und Ersetzungsanweisungen für reguläre Ausdrücke durch
Mixed preg_replace (Mixed Pattern, Mixed Replacement, Mixed Subject [, Int Limit])
durchsucht das Subjekt nach Übereinstimmungen mit dem Muster Muster und ersetzt diese durch Replacement. Wenn limit angegeben ist, werden nur limit-Übereinstimmungen ersetzt. Wenn limit weggelassen wird oder einen Wert von -1 hat, werden alle Übereinstimmungen ersetzt.
replacement kann einen Rückverweis in der Form \n oder (seit PHP 4.0.4) in der Form $n enthalten, wobei letzteres bevorzugt wird. Jeder dieser Verweise wird durch Text ersetzt, der dem n-ten erfassten Teilmuster in Klammern entspricht. n kann zwischen 0 und 99 liegen, wobei \0 oder $0 sich auf den Text bezieht, der mit dem gesamten Muster übereinstimmt. Zählen Sie die linke Klammer von links nach rechts (beginnend bei 1), um die Anzahl der Untermuster zu erhalten.
Für Ersetzungsmuster, die auf einen Rückverweis durch eine Zahl folgen (d. h. eine Zahl, die unmittelbar auf ein passendes Muster folgt), kann die bekannte \1- Notation nicht zur Darstellung des Rückverweises verwendet werden. Beispielsweise führt \11 dazu, dass preg_replace() verwirrt wird, ob eine Rückreferenz von \1 gefolgt von der Zahl 1 oder eine Rückreferenz von \11 gewünscht wird. Die Lösung besteht in diesem Fall darin, ${1}1 zu verwenden. Dadurch wird eine isolierte Rückreferenz für $1 erstellt, während die andere 1 nur ein Literal bleibt.
Wenn eine Übereinstimmung gefunden wird, wird der ersetzte Betreff zurückgegeben, andernfalls wird der ursprüngliche Betreff zurückgegeben.
Jeder Parameter von preg_replace() (außer limit) kann ein Array sein. Wenn sowohl Muster als auch Ersetzung Arrays sind, werden sie in der Reihenfolge verarbeitet, in der ihre Schlüssel im Array erscheinen. Dies entspricht nicht unbedingt der numerischen Reihenfolge des Index. Wenn ein Index verwendet wird, um zu identifizieren, welches Muster durch welche Ersetzung ersetzt werden soll, sollte das Array vor dem Aufruf von preg_replace() mit ksort() sortiert werden.
Wenn subject ein Array ist, wird für jedes Element im subject eine Suche und Ersetzung durchgeführt und ein Array zurückgegeben.
Wenn Muster und Ersetzung beide Arrays sind, entnimmt preg_replace() die Werte aus ihnen, um das Subjekt zu suchen und zu ersetzen. Wenn in replacement weniger Werte vorhanden sind als in pattern, wird ein leerer String als verbleibender Ersatzwert verwendet. Wenn „Muster“ ein Array und „Ersetzung“ ein String ist, wird dieser String als Ersatzwert für jeden Wert im Muster verwendet. Der umgekehrte Weg ist bedeutungslos.
Der Modifikator /e bewirkt, dass preg_replace() das Ersetzungsargument als PHP-Code behandelt (nachdem entsprechende Rückverweise ersetzt wurden). Tipp: Stellen Sie sicher, dass die Ersetzung eine gültige PHP-Codezeichenfolge bildet, andernfalls meldet PHP einen Syntax-Parsing-Fehler in der Zeile, die preg_replace() enthält.
Hinweis: Der Limit-Parameter wurde nach PHP 4.0.1pl2 hinzugefügt.
Ich denke, seine Stärke liegt darin, dass es nicht nur Strings, sondern auch Arrays verarbeiten kann und seine Reverse-Reference-Funktion sehr flexibel ist. Grundsätzlich kann es die meisten Anforderungen normaler Benutzer erfüllen. Wenn es nicht kompetent ist, verfügen wir auch über die Funktion preg_replace_callback (), mit der Sie die Rückruffunktion an Ihre erweiterten Anforderungen anpassen können. Zum Beispiel das Entwerfen von Filtern usw.
preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback – Verwenden Sie die Callback-Funktion, um Such- und Ersetzungsanweisungen für reguläre Ausdrücke auszuführen
gemischt preg_replace_callback (gemischtes Muster, Rückrufrückruf, gemischtes Subjekt [, int limit])
Diese Funktion verhält sich fast wie preg_replace(), außer dass anstelle eines Ersatzparameters eine Rückruffunktion angegeben wird. Diese Funktion verwendet als Eingabe ein Array von Übereinstimmungen in der Zielzeichenfolge und gibt die zum Ersetzen verwendete Zeichenfolge zurück.
Beispiel 1. Beispiel für preg_replace_callback()
<?php
// Dieser Text ist für 2002,
// Möchte es nun für 2003 verfügbar machen
$text = "Der Aprilscherz ist der 01.04.2002n";
$text.= "Letztes Weihnachten war der 24.12.2001n";
// Callback-Funktion
Funktion next_year($matches) {
// Normalerweise: $matches[0] ist die vollständige Übereinstimmung
// $matches[1] ist die Übereinstimmung für das Untermuster in der ersten Klammer
// und so weiter
return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
"|(d{2}/d{2}/)(d{4})|",
„nächstes_Jahr“,
$text);
//Das Ergebnis ist:
// Der Aprilscherz ist der 01.04.2003
// Letztes Weihnachten war der 24.12.2002
?>
Sie benötigen die Callback-Funktion für preg_replace_callback() oft nur an einer Stelle. In diesem Fall können Sie create_function() verwenden, um eine anonyme Funktion als Callback innerhalb des Aufrufs von preg_replace_callback() zu deklarieren Sie haben alle Informationen für den Aufruf an einem Ort und überladen den Funktionsnamensraum nicht mit einem Callback-Funktionsnamen, der nirgendwo anders verwendet wird.
Für Freunde, die die Funktion preg_replace_callback() verwenden, sollten Sie wahrscheinlich die Callback-Funktion benötigen (warum sonst? Warum sollte man sie nicht verwenden? Ist es nicht besser, preg_replace direkt zu verwenden), aber sie wird oft nur an einer Stelle verwendet. In diesem Fall können Sie create_function() verwenden, um eine anonyme Funktion als Callback-Funktion von preg_replace_callback() zu deklarieren. Auf diese Weise erfüllen wir die Notwendigkeit, Informationen zu deklarieren, ohne durch einen Funktionsnamen verwirrt zu werden, der nicht erneut verwendet wird.
Beispiel 2. preg_replace_callback() und create_function()
<?php
/* Ein Befehlszeilenfilter im UNIX-Stil, der die Zeichenfolge am Anfang jedes Absatzes entfernt
*Großbuchstaben in Kleinbuchstaben umwandeln*/
$fp = fopen("php://stdin", "r") or die("can't read stdin");
while (!feof($fp)) {
$line = fgets($fp);
$line = preg_replace_callback(
'|<p>s*w|',
create_function(
// Die Verwendung von einfachen Anführungszeichen ist hier von entscheidender Bedeutung.
// Andernfalls ersetzen Sie alle $ durch $
'$matches',
'return strtolower($matches[0]);'
),
$line
);
echo $line;
}
fclose($fp);
?>
Endlich
preg_split
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_split – Teilen Sie einen String mithilfe regulärer Ausdrücke. Ich werde hier nicht auf Details eingehen.
veranschaulichen
array preg_split ( string pattern, string subject [, int limit [, int flags]] )
gibt ein Array zurück, das die Teilzeichenfolgen im Subjekt enthält, die entlang der mit dem Muster übereinstimmenden Grenzen aufgeteilt sind.
Wenn limit angegeben ist, werden höchstens limitierte Teilzeichenfolgen zurückgegeben. Wenn limit -1 ist, bedeutet dies, dass es kein Limit gibt und zur weiteren Angabe optionaler Parameterflags verwendet werden kann.
Flags können eine beliebige Kombination der folgenden Flags sein (kombiniert mit dem bitweisen ODER-Operator | ):
PREG_SPLIT_NO_EMPTY
Wenn dieses Flag gesetzt ist, gibt preg_split() nur nicht leere Komponenten zurück.
PREG_SPLIT_DELIM_CAPTURE
Wenn dieses Flag gesetzt ist, werden auch Klammerausdrücke in Trennzeichenmustern erfasst und zurückgegeben. Dieses Tag wurde in PHP 4.0.5 hinzugefügt.
PREG_SPLIT_OFFSET_CAPTURE
Wenn dieses Flag gesetzt ist, wird auch der zugehörige String-Offset jedes Vorkommens des passenden Ergebnisses zurückgegeben. Beachten Sie, dass dadurch der Wert des zurückgegebenen Arrays geändert wird, sodass jede Zelle auch ein Array ist, wobei das erste Element die übereinstimmende Zeichenfolge und das zweite Element deren Offset innerhalb des Betreffs ist. Dieses Tag ist seit PHP 4.3.0 verfügbar.
Tipp: Wenn Sie die Leistungsfähigkeit regulärer Ausdrücke nicht benötigen, können Sie schnellere (und einfachere) Alternativen wie „explosive()“ oder „str_split()“ verwenden.