Bei der Verwendung regulärer Ausdrücke zum Abgleichen von Wörtern kann das B-Grenzenmuster manchmal zu unerwarteten Ergebnissen führen, insbesondere wenn das Wort Sonderzeichen enthält Zeichen.
Betrachten Sie den Ausdruck „test Sortesindex[persons]{Sortes} text.“ Durch den Abgleich der vollständigen Phrase mit b
Formell entspricht b der Grenze zwischen einem Wortzeichen (w) und einem Nichtwortzeichen (W) oder der Anfang/das Ende der Zeichenfolge. Wenn auf das Wortgrenzenmuster unmittelbar ein Sonderzeichen wie [ oder } folgt, erfordert das b nur ein Wortzeichen nach dem Sonderzeichen.
Zur Adressierung In diesem Fall können adaptive Wortgrenzen oder eindeutige Wortgrenzen verwendet werden.
Adaptive Wortgrenzen verarbeiten jede Kombination davon Wort- und Nichtwortzeichen auf beiden Seiten des Musters:
re.search(r'(?:(?!\w)|\b(?=\w)){}(?:(?<=\w)\b|(?<!\w))'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')
Eindeutige Wortgrenzenerfordern keine Wortzeichen auf beiden Seiten des Musters:
re.search(r'(?<!\w){}(?!\w)'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')
Adaptive Wortgrenzen sind vielseitiger, erlauben aber führende und nachfolgende Nicht-Wort-Zeichen. Eindeutige Wortgrenzen sind strenger und stellen sicher, dass es keine umgebenden Wortzeichen gibt.
Die für adaptive und eindeutige Wortgrenzen verwendeten Lookaround-Muster können basierend auf den spezifischen Anforderungen der Matching-Aufgabe angepasst werden. Um beispielsweise nur Nicht-Buchstaben rund um das Muster abzugleichen, verwenden Sie [^Wd_] anstelle von w.
Das obige ist der detaillierte Inhalt vonWarum verhalten sich die Wortgrenzen regulärer Ausdrücke (\b) bei Sonderzeichen falsch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!