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);
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 ^^
Die Übereinstimmung ist erfolgreich, weil es vorhanden ist eine Wortgrenze zwischen dem Buchstaben „g“ und dem Symbol „@“. Im zweiten Fall jedoch:
something!@nimal ^^
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);
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!