Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Rolle von Mustermodifikatoren in regulären Ausdrücken

Detaillierte Erläuterung der Rolle von Mustermodifikatoren in regulären Ausdrücken

藏色散人
藏色散人nach vorne
2020-01-27 14:31:122957Durchsuche

Detaillierte Erläuterung der Rolle von Mustermodifikatoren in regulären Ausdrücken

Detaillierte Erläuterung der Rolle von Mustermodifikatoren in regulären Ausdrücken (i, g, m, s, x, e)

Was sind Mustermodifikatoren?

1. Wir können jeweils einen Buchstaben oder mehrere nacheinander in jedem regulären Ausdruck verwenden bestimmte Bedeutung.

2. Der Mustermodifikator wird zur Optimierung des gesamten regulären Ausdrucks verwendet. Er kann auch als Erweiterung der regulären Ausdrucksfunktion bezeichnet werden.

Erinnern Sie sich an die Formel regulärer Ausdrücke? „/Atome und Metazeichen/Mustermodifikator“, bei der der Schrägstrich das Grenzzeichen ist.

Die Zusammensetzung von Mustermodifikatoren

Mustermodifikatoren sind Buchstaben, die jedoch bei der Anwendung von Mustermodifikatoren eine besondere Bedeutung haben. Lassen Sie mich einen Blick darauf werfen, welche Mustermodifikatoren verfügbar sind. Sehen Sie sich dazu bitte die folgende Tabelle an:

Detaillierte Erläuterung der Rolle von Mustermodifikatoren in regulären Ausdrücken

Da i bedeutet, dass bei der Übereinstimmung die Groß-/Kleinschreibung nicht beachtet wird, gilt im folgenden Beispiel Folgendes: Um dies zu demonstrieren, schauen wir uns Beispiele für andere Mustermodifikatoren an.

1, Modusmodifikator m.

Der Code lautet wie folgt:

<?php 
$pattern = &#39;/^abc/m&#39;; 
$string = &#39;bcd 
abc 
cba&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>

Das Matching-Ergebnis ist erfolgreich. Hinweis: Wenn wir den Mustermodifikator m verwenden, behandeln wir die übereinstimmende Zeichenfolge als mehrere Zeilen anstelle der standardmäßigen einzelnen Zeile. Solange also eine Zeile mit abc beginnt, ist die Übereinstimmung erfolgreich. Wenn jedoch vor den übereinstimmenden Zeilen Leerzeichen stehen, werden diese nicht abgeglichen, es sei denn, der Übereinstimmungsmodus des regulären Ausdrucks wird geändert.

2, Modusmodifikator s.

Der Code lautet wie folgt:

<?php 
$pattern = &#39;/a.*c/s&#39;; 
$string = &#39;adsadsa 
c&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>

Der Fehler für dieses Match war ebenfalls erfolgreich. Wenn Sie die Mustermodifizierer s im obigen Beispiel entfernen, schlägt der Abgleich fehl. Da der Mustermodifikator s die übereinstimmende Zeichenfolge als einzelne Zeile behandelt, kann das „.“ im Metazeichen zu diesem Zeitpunkt ein Zeilenumbruchsymbol darstellen.

3, Modusmodifikator x.

Der Code lautet wie folgt:

<?php 
$pattern = &#39;/a c/x&#39;; 
$string = &#39;a c&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>

Das passende Ergebnis ist dieses Mal fehlgeschlagen. Weil wir den Mustermodifikator x verwendet haben, um die Leerzeichen im Muster zu löschen. Hinweis: Wir können den Mustermodifikator nicht verwenden, um das durch s dargestellte Leerzeichen zu löschen.

4, Modusmodifikator A.

Der Code lautet wie folgt:

<?php 
$pattern = &#39;/ac/A&#39;; 
$string = &#39;acahgyghvbm&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>

Die Bedeutung des regulären Ausdrucks besteht darin, die Zeichenfolge abzugleichen, die mit ac beginnt, und das Ergebnis ist erfolgreich.

Der Mustermodifikator Z stellt eine Übereinstimmung dar, die mit einer Zeichenfolge endet. Die Verwendung ist die gleiche wie bei A. Wir werden sie nicht noch einmal demonstrieren.

5, Modusmodifikator U.

Dieser Mustermodifikator ist sehr wichtig! In regulären Ausdrücken ist er selbst „gierig“. Was ist also der Greedy-Modus? Der Greedy-Modus bedeutet, dass der reguläre Ausdruck standardmäßig weitere Übereinstimmungen versucht, nachdem er die erste Übereinstimmung gefunden hat. Wenn eine Übereinstimmung gefunden wird, wird er mit dem größten Bereich von Zeichenfolgen übereinstimmen. Aber manchmal ist dies nicht das gewünschte Ergebnis, also müssen wir den Greedy-Modus abbrechen.

Sehen wir uns zunächst ein Beispiel für den Greedy-Modus an:

Der Code lautet wie folgt:

<?php 
$pattern = &#39;/<b>.*<\/b>/&#39;; 
$string = &#39;<b>welcome</b> <b>to</b> <b>phpfuns</b>&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>

Die ursprüngliche Absicht dieses Beispiels besteht darin, mit „Willkommen“ übereinzustimmen, aber das Ergebnis ist Um das gesamte Zeichen der Zeichenfolge „Welcome to phpfuns“ abzugleichen (beachten Sie, dass unser String „Willkommen bei phpfuns“, dessen Anfang und Ende genau den Musterabgleich des regulären Ausdrucks darstellen, sodass die Übereinstimmung erfolgreich ist), ist dies der gierige Modus des regulären Ausdrucks Ausdruck. Das ist natürlich nicht das Ergebnis, das wir wollen.

Greedy-Modus aufheben

Wir können den Mustermodifikator U und das Metazeichen ? verwenden, um den Greedy-Modus des regulären Ausdrucks auf zwei Arten aufzuheben.

Modusmodifikator U bricht den Greedy-Modus ab

Der Code lautet wie folgt:

<?php 
$pattern = &#39;/<b>.*<\/b>/U&#39;; 
$string = &#39;<b>welcome</b> <b>to</b> <b>phpfuns</b>&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>

Metazeichen? Greedy-Modus abbrechen

Der Code lautet wie folgt:

<?php 
$pattern = &#39;/<b>.*?<\/b>/&#39;; 
$string = &#39;<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Rolle von Mustermodifikatoren in regulären Ausdrücken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen