Kann jemand den Unterschied zwischen \b
und erklären\w
Metazeichen regulären Zeichen ? Nach meinem Verständnis werden diese beiden Metazeichen für Wortgrenzen verwendet. Abgesehen davon, welcher Meta-Charakter ist für mehrsprachige Inhalte effizient?
142
\w
repräsentiert ein Wort Charakter , während\b
ein Wort darstellt Grenze zwischen einem Wortzeichen und einem Nicht-Wortzeichen. Sie sind nicht dasselbe.Antworten:
Das Metazeichen
\b
ist ein Anker wie das Caret und das Dollarzeichen. Es stimmt an einer Position überein, die als "Wortgrenze" bezeichnet wird . Diese Übereinstimmung hat eine Länge von Null.Es gibt drei verschiedene Positionen, die als Wortgrenzen gelten:
Einfach ausgedrückt:
\b
Ermöglicht die Suche nach "nur ganzen Wörtern" mit einem regulären Ausdruck in Form von\bword\b
. Ein "Wortzeichen" ist ein Zeichen, das zur Bildung von Wörtern verwendet werden kann. Alle Zeichen, die keine "Wortzeichen" sind, sind "Nichtwortzeichen". .In allen Geschmacksrichtungen sind die Zeichen
[a-zA-Z0-9_]
Wortzeichen. Diese werden auch von der Kurzzeichenklasse abgeglichen\w
. Aromen mit "ascii" im Geschmacksvergleich für Wortgrenzen erkennen nur diese als Wortzeichen.\w
steht normalerweise für "Wortzeichen"[A-Za-z0-9_]
. Beachten Sie die Aufnahme des Unterstrichs und der Ziffern.\B
ist die negierte Version von\b
.\B
passt an jeder Position, wo\b
nicht. Stimmt effektiv\B
an einer beliebigen Position zwischen zwei Wortzeichen sowie an einer beliebigen Position zwischen zwei Nichtwortzeichen überein.\W
ist[^\w]
die Abkürzung für die negierte Version von\w
.quelle
\w
entspricht einem Wortzeichen.\b
ist eine Übereinstimmung mit der Breite Null, die einem Positionszeichen entspricht, das auf der einen Seite ein Wortzeichen und auf der anderen Seite kein Wortzeichen enthält. (Beispiele für Dinge, die keine Wortzeichen sind, sind Leerzeichen, Anfang und Ende der Zeichenfolge usw.)\w
Spielena
,b
,c
,d
,e
, undf
in"abc def"
\b
Spielen die (Null-Breite) Position vora
, nachc
, vord
und nach demf
in"abc def"
Siehe: http://www.regular-expressions.info/reference.html/
quelle
\b
eine Behauptung mit einer Breite von Null; es passt nicht zu einem Charakter , es passt zu einer Position .@ Mahender, du hast wahrscheinlich den Unterschied zwischen
\W
(statt\w
) und gemeint\b
. Wenn nicht, würde ich @BoltClock und @jwismar oben zustimmen. Ansonsten lesen Sie weiter.\W
würde mit jedem Nicht-Wort-Zeichen übereinstimmen und daher ist es einfach zu versuchen, es zum Abgleichen von Wortgrenzen zu verwenden. Das Problem ist, dass es nicht mit dem Anfang oder Ende einer Zeile übereinstimmt.\b
ist besser geeignet, um Wortgrenzen abzugleichen, da es auch mit dem Anfang oder Ende einer Zeile übereinstimmt. Grob gesagt (erfahrene Benutzer können mich hier korrigieren)\b
kann man sich vorstellen(\W|^|$)
. [Bearbeiten: Wie @ Ωmega unten erwähnt,\b
ist dies also eine Übereinstimmung mit der Länge Null(\W|^|$)
nicht streng korrekt, hilft aber hoffentlich, den Unterschied zu erklären.]Schnell Beispiel: Für die Zeichenfolge
Hello World
,.+\W
würde übereinstimmenHello_
(mit Leerzeichen) , aber nicht übereinstimmtWorld
..+\b
würde zu beiden passenHello
undWorld
.quelle
\b
der gleichen Bedeutung wie(\W|^|$)
, da(\W|^|$)
das Nicht-Wort-Zeichen in das übereinstimmende Ergebnis aufgenommen wird. Sie können diese Tatsache hier überprüfen => regexr.com/3qf98 .\b
bedeutet für mich dasselbe wie(?<=\W|^|$)
vor einem Muster und(?=\W|^|$)
nach einem Muster. Sie können überprüfen, wovon ich hier spreche => regexr.com/3qf9h . Vergleichen Sie einfach hier mit dem Ergebnis der\b
Anker => regexr.com/3qf9tStimmt mit einer Position überein, auf die ein Wortzeichen folgt, der jedoch kein Wortzeichen vorangestellt ist, oder der ein Wortzeichen vorangestellt ist, dem jedoch kein Wortzeichen folgt.
Es stimmt immer mit den ASCII-Zeichen überein [A-Za-z0-9_]
Gibt es etwas Spezielles, mit dem Sie übereinstimmen möchten?
Einige nützliche Regex-Websites für Anfänger oder um Ihren Appetit zu stillen.
Ich fand das ein sehr nützliches Buch:
quelle
\w
nicht immer den ASCII-Zeichen entspricht.[A-Za-z0-9_]
Es stimmt auch mit alphanumerischen Unicode-Codepunkten überein und kann mit 8-Bit-ISO-Latin-1-Zeichen übereinstimmen, wenn das Gebietsschema entsprechend festgelegt ist .\w
ist keine Wortgrenze, sondern entspricht jedem Wortzeichen, einschließlich Unterstrichen :[a-zA-Z0-9_]
.\b
ist eine Wortgrenze, dh sie entspricht der Position zwischen einem Wort und einem nicht alphanumerischen Zeichen:\W
oder[^\w]
.Diese Implementierungen können jedoch von Sprache zu Sprache variieren.
quelle