In PHP ist ein regulärer Ausdruck eine benutzerdefinierte Grammatikregel, die das Zeichenanordnungsmuster beschreibt. Es verfügt über ein sehr vollständiges Grammatiksystem, das Muster schreiben kann und eine flexible und intuitive Methode zur Zeichenfolgenverarbeitung bietet. Reguläre Ausdrücke beschreiben ein String-Matching-Muster, mit dem überprüft werden kann, ob ein String einen bestimmten Teilstring enthält, der passende Teilstring ersetzt werden kann oder ein Teilstring, der eine bestimmte Bedingung erfüllt, aus einem String extrahiert werden kann usw. warten.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP 8-Version, DELL G3-Computer
Vielleicht haben Sie schon einmal von regulären Ausdrücken gehört, und der allgemeine Eindruck ist, dass es schwer zu erlernen und sehr kompliziert ist. und hat ein Gefühl des Unergründlichen. Tatsächlich sind reguläre Ausdrücke nicht so mysteriös. Es handelt sich um eine benutzerdefinierte Grammatikregel, die das Zeichenanordnungsmuster beschreibt.
Was sind reguläre Ausdrücke? Reguläre Ausdrücke werden auch Musterausdrücke genannt. Sie verfügen über ein sehr vollständiges Grammatiksystem zum Schreiben von Mustern und bieten eine flexible und intuitive Methode zur Zeichenfolgenverarbeitung. Reguläre Ausdrücke erstellen Muster nach bestimmten Regeln, vergleichen sie mit eingegebenen Zeichenfolgeninformationen und verwenden sie in bestimmten Funktionen, um Vorgänge wie Zeichenfolgenabgleich, Suche, Ersetzung und Segmentierung durchzuführen. Um ein Beispiel aus unserem täglichen Leben zu nennen: Wenn Sie in einem bestimmten Verzeichnis auf Ihrem Computer nach allen Dateien im TXT-Format suchen möchten, können Sie *.txt in das Verzeichnis eingeben und dann die Eingabetaste drücken, um die Dateien aufzulisten Das Verzeichnis. Alle Dateien im TXT-Format. Das hier verwendete *.txt kann als einfacher regulärer Ausdruck verstanden werden.
Die folgenden zwei Beispiele werden mithilfe der Syntax regulärer Ausdrücke erstellt, wie unten gezeigt:
/http(s)?:\/\/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is // 匹配网址 URL 的正则表达式 /^\w{3,}@([a-z]{2,7}|[0-9]{3})\.(com|cn)$/ // 匹配邮箱地址的正则表达式
Lassen Sie sich nicht von den scheinbar verstümmelten Zeichenfolgen in den obigen Beispielen abschrecken. Sie werden gemäß den Syntaxregeln regulärer Ausdrücke A erstellt Zeichenfolge bestehend aus gewöhnlichen Zeichen und Zeichen mit Sonderfunktionen. Und diese Zeichenfolgen müssen in bestimmten regulären Ausdrucksfunktionen verwendet werden, um wirksam zu sein.
Der Zweck regulärer Ausdrücke
Reguläre Ausdrücke beschreiben ein Zeichenfolgenvergleichsmuster, mit dem überprüft werden kann, ob eine Zeichenfolge eine bestimmte Teilzeichenfolge enthält, die übereinstimmende Teilzeichenfolge ersetzt oder aus Teilzeichenfolgen extrahiert werden kann, die bestimmte Bedingungen erfüllen ab einer bestimmten Zeichenfolge usw. Wenn ein Benutzer beispielsweise ein Formular abschickt, um festzustellen, ob die eingegebene Telefonnummer, E-Mail-Adresse usw. gültig ist, reicht eine gewöhnliche wörtliche Zeichenüberprüfung offensichtlich nicht aus. Reguläre Ausdrücke sind Textmuster, die aus gewöhnlichen Zeichen (z. B. den Zeichen a bis z) sowie Sonderzeichen (sogenannte „Metazeichen“) bestehen. Ein regulärer Ausdruck fungiert als Vorlage, die ein Zeichenmuster mit einer gesuchten Zeichenfolge abgleicht. Ein reguläres Ausdrucksmuster kann ein einzelnes Zeichen, eine Sammlung von Zeichen, eine Reihe von Zeichen, eine Auswahl zwischen Zeichen oder eine beliebige Kombination all dieser Komponenten sein.
Der Zweck der Verwendung regulärer Ausdrücke besteht darin, auf einfache Weise leistungsstarke Funktionen zu erreichen. Um einfach, effektiv und leistungsstark zu sein, sind die Regeln für reguläre Ausdrücke kompliziert. Es ist noch schwieriger, korrekte und effektive reguläre Ausdrücke zu erstellen, daher ist ein gewisser Aufwand erforderlich. Nach dem Einstieg ist es durch bestimmte Referenzen und viel Übung sehr effektiv und interessant, reguläre Ausdrücke in der Entwicklungspraxis zu verwenden.
Häufig verwendete Begriffe in regulären Ausdrücken
Bevor wir reguläre Ausdrücke lernen, wollen wir zunächst einige leicht verwechselbare Begriffe in regulären Ausdrücken verstehen, die beim Erlernen regulärer Ausdrücke eine große Hilfe sein werden.
1) grepwar ursprünglich ein Befehl im ED-Editor, der zum Anzeigen bestimmter Inhalte in der Datei verwendet wurde. Später wurde grep zu einem eigenständigen Tool.
2) egrepObwohl grep ständig aktualisiert und aktualisiert wird, kann es immer noch nicht mit dem Tempo der Technologie mithalten. Aus diesem Grund hat Bell Labs egrep geschrieben, was „extended grep“ bedeutet. Dies erhöht die Leistungsfähigkeit regulärer Ausdrücke erheblich.
3) POSIX (Portable Operating System Interface von UNIX)Portable Operating System Interface. Als sich grep weiterentwickelte, erstellten andere Entwickler ihre eigenen Versionen mit einzigartigen Stilen, basierend auf ihren eigenen Vorlieben. Es treten jedoch auch Probleme auf. Einige Programme unterstützen bestimmte Metazeichen, andere nicht. Daher POSIX. POSIX ist eine Reihe von Standards, die die Portabilität zwischen Betriebssystemen gewährleisten. Allerdings ist POSIX, ebenso wie SQL, nicht zum endgültigen Standard geworden und kann nur als Referenz verwendet werden.
4) Perl (Praktische Extraktions- und Berichtssprache)Praktische Extraktions- und Berichtssprache. 1987 veröffentlichte Larry Wall Perl. In den folgenden 7 Jahren, von Perl1 bis zum aktuellen Perl5, wurde es schließlich zu einem weiteren Standard nach POSIX.
5) PCREDer Erfolg von Perl hat dazu geführt, dass andere Entwickler bis zu einem gewissen Grad mit „Perl“ kompatibel sind, darunter C/C++, Java, Python usw., die alle ihre eigenen regulären Ausdrücke haben. Im Jahr 1997 entwickelte Philip Hazel die PCRE-Bibliothek, eine Reihe regulärer Ausdrucks-Engines, die mit regulären Perl-Ausdrücken kompatibel sind. Andere Entwickler können PCRE in ihre eigenen Sprachen integrieren, um Benutzern umfangreiche Funktionen für reguläre Ausdrücke bereitzustellen. PCRE wird von vielen Programmen verwendet, einschließlich PHP.
Syntaxregeln für reguläre Ausdrücke
Bevor wir reguläre Ausdrücke verwenden, müssen wir zunächst die Syntax regulärer Ausdrücke lernen. Zu den Bestandteilen regulärer Ausdrücke gehören im Allgemeinen gewöhnliche Zeichen, Metazeichen, Qualifizierer, Ankerpunkte, nicht druckbare Zeichen und spezifizierte Ersetzungen.
1) Gewöhnliche Zeichen
Zu den gewöhnlichen Zeichen zählen alle druckbaren und nicht druckbaren Zeichen, die nicht ausdrücklich als Metazeichen gekennzeichnet sind, einschließlich aller Groß- und Kleinbuchstaben, Zahlen, Satzzeichen und einiger Symbole. Der einfachste reguläre Ausdruck ist ein einzelnes gewöhnliches Zeichen, das zum Vergleichen von Suchzeichenfolgen verwendet wird. Beispielsweise stimmt der aus einem Zeichen bestehende reguläre Ausdruck /A/ immer mit dem Buchstaben A überein.
Sie können auch mehrere einzelne Zeichen zu einem längeren Ausdruck kombinieren. Beispielsweise entspricht der reguläre Ausdruck /the/ dem, dort, anderen und über dem Lazy Dog in der Suchzeichenfolge. Es ist nicht erforderlich, Verkettungsoperatoren zu verwenden. Geben Sie die Zeichen einfach nacheinander ein.
2) Metazeichen
Reguläre Ausdrücke können neben gewöhnlichen Zeichen auch „Metazeichen“ enthalten. Metazeichen können in Einzelzeichen-Metazeichen und Mehrzeichen-Metazeichen unterteilt werden. Zum Beispiel das Metazeichen d, das numerischen Zeichen entspricht.
Alle Einzelzeichen-Metazeichen sind in der folgenden Tabelle aufgeführt.
Metazeichen | Verhalten | Beispiel | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
* | stimmt null oder mehrmals mit dem vorhergehenden Zeichen oder Unterausdruck überein, entspricht {0,} | zo* mit „z“ und „zoo“ stimmt überein | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ | stimmt ein oder mehrere Male mit dem vorhergehenden Zeichen oder Unterausdruck überein, entspricht {1,} | zo+ stimmt mit „zo“ und „zoo“, aber nicht mit „z“ überein. Stimmt mit | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
? | mit dem vorhergehenden überein Zeichen oder Unterausdruck null oder einmal, äquivalent zu {0,1} , wenn ? auf ein anderes Qualifikationsmerkmal (*, +, ?, {n}, {n,} oder {n,m}) folgt, ist das passende Muster nicht gierig. Das nicht gierige Muster stimmt mit so wenigen Zeichenfolgen wie möglich überein, während das standardmäßige gierige Muster mit so vielen Zeichenfolgen wie möglich übereinstimmt einzelnes „o“ in „oooo“, während o+ mit allen „o“s übereinstimmt | do(es)? Entspricht „do“ in „do“ oder „does“ ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
^d{3} entspricht den 3 Zeichen am Anfang der Suchzeichenfolge | [^abc] außer a, b , alle Zeichen außer c entspricht | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
d{3}$ entspricht 3 Ziffern am Ende der Suchzeichenfolge | . | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
a.c entspricht „abc“, „a1c“ und „a-c“ | [] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[1- 4] entspricht „1“, „2“, „3“ oder „4“ | [^aAeEiIoOuU] entspricht jedem Nicht-Vokal-Zeichen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
a {2,3} entspricht „aa“ und „aaa“. | () | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A(d) entspricht „A0“ bis „ A9". Speichern Sie diese Nummer für die zukünftige Verwendung. | | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
z|food entspricht „z“ oder „food“. | (z|f)ood entspricht „zood“ oder „food“. Übereinstimmungen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/abc/gi ist ein regulärer JavaScript-Textausdruck, der mit „abc“ übereinstimmt. Das g-Flag (global) gibt an, alle Vorkommen des Musters zu finden. Das i-Flag (Groß-/Kleinschreibung ignorieren) macht die Suche unabhängig von der Groß-/Kleinschreibung. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
n entspricht dem Newline-Zeichen. ( entspricht „(“. \ entspricht „“ |
Metazeichen | Verhalten | Beispiel |
---|---|---|
b | stimmt mit einer Wortgrenze überein. Das heißt, die Position zwischen Wörtern und Leerzeichen. | erb entspricht dem „er“ in „never“, aber nicht dem „er“ in „verb“. " Entspricht dem „er“ in „never“, aber nicht dem „er“ in „never“ |
d | Zahlenzeichenübereinstimmung, entspricht [0-9] | in der Suchzeichenfolge „12 345“, d {2} entspricht „12“ und „34“. d passt zu „1“, „2“, „3“, „4“ und „5“ abc“ und „def“ in „def“ stimmen überein. |
w | entspricht jedem Zeichen in A-Z, a-z, 0-9 und Unterstrich, entsprechend [A-Za-z0-9] | In der Suchzeichenfolge „ Der schnelle braune Fuchs ...“ w+ passt zu „The“, „quick“, „brown“ und „fox“ |
W | passt zu allem außer A-Z, a-z, 0-9 und passt zu jedem Zeichen außer Unterstrich, Äquivalent bis [^A-Za-z0-9] | In der Suchzeichenfolge „The quick brown fox…“ stimmt W+ mit „…“ und allen Leerzeichen überein |
[xyz] | Zeichensatz, Übereinstimmungen eines der angegebenen Zeichen | [abc] und entspricht dem „a“ in „plain“ |
[^xyz] | Umgekehrter Zeichensatz, entspricht nicht spezifiziert Alle Zeichen entsprechen | [^abc] Entspricht „p“ , „1“, „i“ und „n“ in „plain“ |
[a-z] | Zeichenbereich, entspricht jedem Zeichen im angegebenen Bereich | [a-z] entspricht jedem Kleinbuchstaben im Bereich „a " bis „z“ |
[^a-z] | umgekehrter Zeichenbereich, entspricht jedem Zeichen, das nicht im angegebenen Bereich liegt | [^a-z ] Entspricht jedem Zeichen, das nicht im Bereich „a“ bis „z“ liegt |
{n} | stimmt genau n-mal überein, n ist eine nicht negative ganze Zahl | o{2} stimmt nicht mit dem „o“ in „Bob“ überein. Stimmt überein, stimmt aber mit zwei „o“s in „fooood“ überein |
{n,} | stimmt mindestens n-mal überein, wobei n eine nicht negative ganze Zahl ist | * ist gleich {0,}+ ist gleich {1,} |
{n,m} | stimmt mindestens n-mal und höchstens m-mal überein. n und m sind nicht negative ganze Zahlen, wobei n<= m, zwischen dem Komma und der Zahl kein Leerzeichen stehen darf | ? ist gleich {0,1}|
(Muster) | Entspricht dem Muster und speichert die Übereinstimmungen. Gespeicherte Übereinstimmungen können aus Array-Elementen abgerufen werden, die von der exec-Methode in JavaScript zurückgegeben werden. Um das Klammerzeichen () abzugleichen, verwenden Sie „(“ oder „)“. stimmt mit dem Muster überein, speichert die Übereinstimmung jedoch nicht, d. h. die Übereinstimmung wird nicht für die zukünftige Verwendung gespeichert. Dies ist nützlich, wenn Musterteile mit dem „oder“-Zeichen (|) kombiniert werden. | |
(?=Muster) | Positiver Lookahead. Sobald eine Übereinstimmung gefunden wurde, beginnt die Suche nach der nächsten Übereinstimmung vor dem übereinstimmenden Text. Übereinstimmungen werden nicht für die zukünftige Verwendung gespeichert | |
.^ und $ geben die Start- und Endpositionen der Suchzeichenfolge an, wodurch eine Übereinstimmung verhindert wird, wenn die Suchzeichenfolge andere Zeichen als die übereinstimmenden Zeichen enthält | ||
(?! Muster) | negativer Lookahead. Entspricht einer Suchzeichenfolge, die nicht mit dem Muster übereinstimmt. Sobald eine Übereinstimmung gefunden wurde, beginnt die Suche nach der nächsten Übereinstimmung vor dem übereinstimmenden Text. Übereinstimmungen werden nicht für die zukünftige Verwendung gespeichert. | b(?!th)/w+b entspricht Wörtern, die nicht mit „th“ beginnen. In diesem Muster entspricht b einer Wortgrenze. Entspricht bei der Suchzeichenfolge „quick“ dem ersten Leerzeichen. (?!th) stimmt mit einer Zeichenfolge überein, die nicht „th“ ist, und stimmt mit „qu“ überein. Ab dieser Übereinstimmung stimmt !w+ mit einem Wort überein, d. Der Wert von x muss im Bereich A-Z oder a-z liegen. Wenn nicht, wird angenommen, dass c das Textzeichen „c“ selbst ist. |
xn | entspricht n, wobei n ein hexadezimaler Escape-Code ist. Der hexadezimale Escape-Code muss genau zwei Ziffern lang sein. ASCII-Codes sind in regulären Ausdrücken zulässig. | |
(.)1 gespeichert wurde. Eine Übereinstimmung mit zwei aufeinanderfolgenden identischen Zeichen | n | |
(d)1 mit zwei aufeinanderfolgenden identischen Zahlenübereinstimmungen | nm | |
11, wenn n und m Oktalziffern (0-7) sind, und entspricht dem Tabulatorzeichen | nml | |
另外,字符具有高于替换运算符的优先级,例如,允许 "m|food" 匹配 "m" 或 "food"。 替换 正则表达式中的替换允许对两个或多个替换选项之间的选择进行分组。实际上可以在模式中指定两种匹配模式的或关系。可以使用管道|字符指定两个或多个替换选项之间的选择,称之为“替换”。匹配管道字符任一侧最大的表达式。 例如: /Chapter|Section [1-9][0-9]{0,1}/ Nach dem Login kopieren 该正则表达式匹配的是字符串“Chapter”或者字符串“Section”后跟一个或两个数字。 如果搜索字符串是“Section 22”,那么该表达式匹配“Section 22”。但是,如果搜索字符串是“Chapter 22”,那么表达式匹配单词“Chapter”,而不是匹配“Chapter 22”。 为了解决这种形式的表达式可能带来的误导,可以使用括号来限制替换的范围,即确保它只应用于两个单词“Chapter”和“Section”。可以通过添加括号来使正则表达式匹配“Chapter 1”或“Section 3”。将以上表达式改成如下形式: /(Chapter|Section) [1-9][0-9]{0,1}/ Nach dem Login kopieren 修改后,如果搜索字符串是“Section 22”,那么该表达式匹配“Section 22”。如果搜索字符串是“Chapter 22”,那么表达式匹配单词也会是“Chapter 22”。 子表达式 正则表达式中放置括号可创建子表达式,子表达式允许匹配搜索文本中的模式并将匹配项分成多个单独的子匹配项,程序可检索生成的子匹配项。 例如匹配邮箱账号的正则表达式: /(\w+)@(\w+)\.(\w+)/ Nach dem Login kopieren 该正则表达式包含 3 个子表达式,3 个子表达式分别进行匹配并保留匹配结果,与其他表达式匹配结果作为一个整体显示出来。 下面的示例将通用资源指示符(URI)分解为其组件: /(\w+):\/\/([^\/:]+)(:\d*)?([^# ]*)/ Nach dem Login kopieren
如果我们使用这个正则表达式匹配字符串“http://msdn.microsoft.com:80/scripting/default.htm”,那么 3 个子表达式的匹配结果分别为 http、msdn.microsoft.com:80、/scripting/default.htm。 反向引用 反向引用用于查找重复字符组。此外,可使用反向引用来重新排列输入字符串中各个元素的顺序和位置,以重新设置输入字符串的格式。 可以从正则表达式和替换字符串中引用子表达式。每个子表达式都由一个编号来标识,并称作反向引用。 在正则表达式中,每个保存的子匹配项按照它们从左到右出现的顺序存储。用于存储子匹配项的缓冲区编号从 1 开始,最多可存储 99 个子表达式。在正则表达式中,可以使用 \n 来访问每个缓冲区,其中 n 标识特定缓冲区的一位或两位十进制数字。 反向引用的一个应用是,提供查找文本中两个相同单词的匹配项的能力。以下面的句子为例: Is is the cost of of gasoline going up up? Nach dem Login kopieren 该句子包含多个重复的单词。如果能设计一种方法定位该句子,而不必查找每个单词的重复出现,就会很有用。 /\b([a-z]+) \1\b/ Nach dem Login kopieren 在此情况下,子表达式是括在括号中的所有内容。该子表达式包括由 [a-z]+ 指定的一个或多个字母字符。正则表达式的第二部分是对以前保存的子匹配项的引用,即单词的第二个匹配项正好由括号表达式匹配。\1 用于指定第一个子匹配项。\b 单词边界元字符确保只检测单独的单词。否则,诸如“is issued”或“this is”之类的词组将不能正确地被此表达式识别。所以,使用表达式 /\b([a-z]+)\1\b/ 匹配字符串“Is is the cost of of gasoline going up up?”得到的结果为 is、of、up。 在 PHP 中使用正则表达式 PHP 有两套函数库支持的正则表达式处理操作:
Die Funktionen der beiden Funktionsbibliotheken sind ähnlich, aber die Ausführungseffizienz von PCRE ist höher als die von POSIX, daher stellen wir nur die PCRE-Funktionsbibliothek vor. Empfohlenes Lernen: „PHP-Video-Tutorial“ Das obige ist der detaillierte Inhalt vonWas bedeutet der reguläre PHP-Ausdruck?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Vorheriger Artikel:Was tun, wenn die Länge der PHP-Strings inkonsistent ist?
Nächster Artikel:So konvertieren Sie AMR in PHP in MP3
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Aktuelle Ausgaben
Bei der Verwendung von opentbs zum Generieren von ODT-Dateien sind Probleme aufgetreten: Werte desselben Schlüssels werden in derselben Zeile statt in separaten Spalten angezeigt.
Ich verwende eine Bibliothek namens OpenTbs, um ODT mit PHP zu erstellen. Ich verwende sie...
Aus 2024-04-06 20:18:18
0
1
483
verwandte Themen
Mehr>
|