it-swarm.com.de

Unterschied zwischen den Metazeichen \ w und \ b für reguläre Ausdrücke

Kann mir jemand den Unterschied erklären zwischen \w und \b Metazeichen mit regulären Ausdrücken?

Nach meinem Verständnis werden diese beiden Metazeichen für Wortgrenzen verwendet. Welcher Meta-Charakter ist ansonsten effizient für mehrsprachige Inhalte?

132
Mahender

Das Metazeichen \b ist ein Anker wie das Caret und das Dollarzeichen. Es stimmt mit einer Position überein, die als "Wortgrenze" bezeichnet wird. Diese Übereinstimmung hat die Länge Null.

Es gibt drei verschiedene Positionen, die als Wortgrenzen gelten:

  • Vor dem ersten Zeichen in der Zeichenfolge, wenn das erste Zeichen ein Wortzeichen ist.
  • Nach dem letzten Zeichen in der Zeichenfolge, wenn das letzte Zeichen ein Wortzeichen ist.
  • Zwischen zwei Zeichen in der Zeichenfolge, wobei eines ein Wortzeichen und das andere kein Wortzeichen ist.

Einfach gesagt: \b ermöglicht die Durchführung einer "nur ganze Wörter" Suche unter Verwendung eines regulären Ausdrucks in Form von \bword\b. Ein "Wortzeichen" ist ein Zeichen, mit dem Wörter gebildet werden können. Alle Zeichen, die nicht "Wortzeichen" sind, sind "Nicht-Wortzeichen".

In allen Geschmacksrichtungen sind die Zeichen [a-zA-Z0-9_] sind Wortzeichen. Dazu passt auch die Kurzzeichenklasse \w. Flavours, die im Flavour-Vergleich "ascii" für Wortgrenzen anzeigen, erkennen nur diese als Wortzeichen.

\w steht für "Wortzeichen", normalerweise [A-Za-z0-9_]. Beachten Sie den Unterstrich und die Ziffern.

\B ist die negierte Version von \b. \B passt an jede Position, an der \b nicht. Tatsächlich \B stimmt an einer beliebigen Position zwischen zwei Wortzeichen sowie an einer beliebigen Position zwischen zwei Nicht-Wortzeichen überein.

\W ist kurz für [^\w], die negierte Version von \w.

239
Ωmega

\w entspricht einem Wortzeichen. \b ist eine Übereinstimmung mit der Breite Null, die mit einem Positionszeichen übereinstimmt, das auf der einen Seite ein Wortzeichen und auf der anderen Seite ein anderes Wortzeichen enthält. (Beispiele für Dinge, die keine Word-Zeichen sind, sind Leerzeichen, Anfang und Ende der Zeichenfolge usw.)

\w entspricht a, b, c, d, e und f in "abc def"
\b entspricht der Position (mit der Breite Null) vor a, nach c, vor d und nach f in "abc def"

Siehe: http://www.regular-expressions.info/reference.html/

20
jwismar

@ Mahender, Sie meinten wahrscheinlich den Unterschied zwischen \W (Anstelle von \w) Und \b. Wenn nicht, stimme ich @BoltClock und @jwismar zu. Ansonsten lesen Sie weiter.

\W Würde mit jedem Nicht-Word-Zeichen übereinstimmen, und daher ist es einfach zu versuchen, es zu verwenden, um Word-Grenzen abzugleichen. Das Problem ist, dass es nicht zum Anfang oder Ende einer Zeile passt. \b Eignet sich besser zum Anpassen von Wortgrenzen, da es auch zum Anfang oder Ende einer Zeile passt. Grob gesagt (erfahrenere Benutzer können mich hier korrigieren) kann \b Als (\W|^|$) Angesehen werden. [Edit: wie @ Ωmega unten erwähnt, ist \b Eine Übereinstimmung mit der Länge Null, daher ist (\W|^|$) Nicht genau richtig, hilft aber hoffentlich, den Unterschied zu erklären]

Ein kurzes Beispiel: Für die Zeichenfolge Hello World Würde .+\W Mit Hello_ (Mit dem Leerzeichen) übereinstimmen, jedoch nicht mit World. .+\b Würde sowohl Hello als auch World entsprechen.

7
mtariq
\b <= this is a Word boundary.

Entspricht einer Position, auf die ein Wortzeichen folgt, vor dem jedoch kein Wortzeichen steht, oder der ein Wortzeichen vorausgeht, auf das jedoch kein Wortzeichen folgt.

\w <= stands for "Word character". 

Es entspricht immer den Zeichen ASCII [A-Za-z0-9_]

Gibt es etwas Bestimmtes, mit dem Sie übereinstimmen möchten?

Einige nützliche Regex-Websites für Anfänger oder nur um den Appetit zu stillen.

Ich fand das ein sehr nützliches Buch:

4
james emanon

\w ist nicht eine Wortgrenze, sie entspricht einem beliebigen Wortzeichen, einschließlich Unterstrichen: [a-zA-Z0-9_]. \bis 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.

2
Julián Urbano