Wie gehen Wortgrenzen in PHP mit Nicht-Wort-Zeichen um?

Mary-Kate Olsen
Freigeben: 2024-10-21 07:25:03
Original
424 Leute haben es durchsucht

How Do Word Boundaries in PHP Handle Non-Word Characters?

Enthüllung der Geheimnisse der Wortgrenzen regulärer Ausdrücke in PHP

Bei der Verwendung regulärer Ausdrücke zum Auffinden bestimmter Wörter im Text ist es oft wünschenswert, diese auszudrücken Einschränkungen, ob das angegebene Wort den Anfang oder das Ende einer Worteinheit markiert. Beim Versuch, dies mithilfe von Wortgrenzen zu implementieren, kann es jedoch zu unerwarteten Verhaltensweisen kommen.

Betrachten Sie den folgenden regulären Ausdruck:

preg_match("/(^|\b)@nimal/i", "something@nimal", $match);
Nach dem Login kopieren

Wir gehen davon aus, dass die Übereinstimmung fehlschlägt, da der Gruppierungsausdruck verbraucht wird das „@“-Symbol, so dass „nimal“ mit „@nimal“ übereinstimmt, was nicht der Fall sein sollte. In diesem Beispiel stimmt der Gruppierungsausdruck jedoch mit einer leeren Zeichenfolge überein, sodass „@nimal“ übereinstimmen kann, was bedeutet, dass „@“ als Teil des Wortes behandelt wird.

Um dieses Rätsel zu lösen, ist es wichtig, es zu verstehen wie Wortgrenzen in PHP bestimmt werden. Eine Wortgrenze (b) stellt einen Übergangspunkt zwischen einem Wortzeichen (w) und einem Nichtwortzeichen (W) dar. Um ein Wort zu finden, das am Anfang eines Wortes beginnen muss, muss dem erwarteten Wort ein zusätzliches Wortzeichen vorangehen.

Im ersten Beispiel gilt also:

something@nimal
        ^^
Nach dem Login kopieren

Die Übereinstimmung ist erfolgreich, weil es vorhanden ist eine Wortgrenze zwischen dem Buchstaben „g“ und dem Symbol „@“. Im zweiten Fall jedoch:

something!@nimal
         ^^ 
Nach dem Login kopieren

Der Abgleich schlägt fehl, weil das „!“ und „@“-Symbole sind beide Nicht-Wort-Zeichen und bilden keine Wortgrenze. Um dies zu beheben, können Sie den folgenden regulären Ausdruck verwenden:

preg_match("/g\b!@\bn/i", "something!@nimal", $match);
Nach dem Login kopieren

Dieser Ausdruck erfordert ein Wortzeichen vor „@“ und ein Wortzeichen nach „@“, um sicherzustellen, dass er nur dann übereinstimmt, wenn „@“ erscheint innerhalb eines Wortes.

Das obige ist der detaillierte Inhalt vonWie gehen Wortgrenzen in PHP mit Nicht-Wort-Zeichen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage