Kann jemand den Unterschied zwischen \ w und \ b regulären Ausdruck Meta-Zeichen erklären? Beide Metazeichen werden für Wortgrenzen verwendet. Abgesehen davon, welcher Meta-Charakter ist für mehrsprachige Inhalte effizient?Unterschied zwischen w und b regulären Ausdruck Meta-Zeichen
Antwort
Der Metazeichen \b
ist ein Anker wie das Caret und das Dollarzeichen. Es entspricht einer Position, die als "Wortgrenze" bezeichnet wird. Diese Übereinstimmung ist Nulllänge.
Es gibt drei verschiedene Positionen, die als Wortgrenzen in Frage kommen:
- Vor dem ersten Zeichen in der Zeichenfolge, wenn das erste Zeichen ist ein Wortzeichen.
- Nach dem letzten Zeichen in der Zeichenfolge, wenn das letzte Zeichen ein Wortzeichen ist.
- Zwischen zwei Zeichen in der Zeichenfolge , wobei eins ein Wortzeichen und das andere kein Wortzeichen ist.
Einfach gesagt: \b
Sie erlaubt eine „nur ganze Wörter“ auszuführen Suche einen regulären Ausdruck in Form von \bword\b
verwenden.A "Wort Zeichen" ist ein Zeichen, das verwendet werden kann, um Wörter zu bilden. Alle Zeichen, die nicht "Wortzeichen" sind, sind "non-word Zeichen". Die Zeichen [a-zA-Z0-9_]
sind in allen Varianten die Wortzeichen. Diese werden auch von der Kurzzeichen-Zeichenklasse \w
abgeglichen. Flavors, die "ascii" für Wortgrenzen im Geschmackvergleich zeigen, erkennen nur diese als Wortzeichen.
\w
steht für "Wort Zeichen", normalerweise [A-Za-z0-9_]
. Beachten Sie die Aufnahme von Unterstrich und Ziffern.
\B
ist die negierte Version von \b
. \B
passt an jeder Position, wo \b
nicht funktioniert. Effektiv passt \B
an jeder Position zwischen zwei Wortzeichen sowie an jeder Position zwischen zwei Nicht-Wortzeichen.
\W
ist die Abkürzung für [^\w]
, die negierte Version von \w
.
\w
passt ein Wortzeichen. \b
ist eine Null-Breite-Übereinstimmung, die einem Positionszeichen entspricht, das auf der einen Seite ein Wortzeichen und auf der anderen Seite kein Wortzeichen hat. (Beispiele für Dinge, die nicht Wortzeichen sind enthalten Leerzeichen, Anfang und Ende des Strings, etc.)
\w
Streichhölzer a
, b
, c
, d
, e
und f
in "abc def"
\b
entspricht der (Null -breite) Position vor a
nach c
, vor d
und nach f
in "abc def"
Es ist korrekter zu sagen, dass es die Grenze zwischen einem Wortzeichen und nicht einem Wortzeichen ist, da es auch zwischen einem Wortzeichen und dem Anfang oder Ende eines Strings passt, wenn sich dieses Zeichen am Anfang/Ende des Strings befindet. – MRAB
Sie haben Recht, das ist richtiger. Ich werde bearbeiten. – jwismar
Es ist immer noch nicht ganz richtig. '\ b 'eine Assertion mit der Breite null; Es entspricht keinem * Zeichen *, es entspricht einer * Position *. –
@Mahender, meinst du wahrscheinlich den Unterschied zwischen \W
(statt \w
) und \b
. Wenn nicht, dann stimme ich @BoltClock und @jwismar oben zu. Ansonsten weiterlesen.
\W
würde jedes Nicht-Wort-Zeichen entsprechen und so ist es einfach zu versuchen, es zu verwenden, um Wortgrenzen zu entsprechen. Das Problem ist, dass es nicht mit dem Anfang oder Ende einer Zeile übereinstimmt. \b
eignet sich besser für Wortgrenzen, da es auch den Anfang oder das Ende einer Zeile abgleicht. Grob gesagt (mehr erfahrene Benutzer können mich hier korrigieren) \b
kann als (\W|^|$)
gedacht werden. [Edit: wie @ Ωmega unten erwähnt, ist \b
eine Länge Null Spiel so (\W|^|$)
nicht ganz korrekt ist, aber hoffentlich hilft das Diff erklären]
Schnell Beispiel: Für die Zeichenfolge Hello World
würde .+\W
Hello_
übereinstimmen (mit dem Raum) wird aber nicht übereinstimmen World
. .+\b
würde sowohl Hello
als auch World
entsprechen.
\w
nicht eine Wortgrenze ist, entspricht es ein beliebiges Wortzeichen, einschließlich Unterstrichen: [a-zA-Z0-9_]
. \b
ist eine Wortgrenze, das heißt, es entspricht der Position zwischen einem Wort und einem nicht-alphanumerischen Zeichen: \W
oder [^\w]
.
Diese Implementierungen können jedoch von Sprache zu Sprache variieren.
\b <= this is a word boundary.
Spiele an einer Position, die von einem Wortzeichen gefolgt wird, aber nicht durch ein Wortzeichen voraus, oder daß von einem Wortzeichen vorangeht, aber nicht durch ein Wort Zeichen folgen.
\w <= stands for "word character".
Es passt immer die ASCII-Zeichen [A-Za-z0-9_]
Gibt es etwas Bestimmtes Sie passen wollen?
Einige nützliche Regex-Websites für Anfänger oder nur um Ihren Appetit zu betäuben.
- http://www.regular-expressions.info
- http://www.javascriptkit.com/javatutors/redev2.shtml
- http://www.virtuosimedia.com/dev/php/37-tested-php-perl-and-javascript-regular-expressions
- http://www.i-programmer.info/programming/javascript/4862-master-javascript-regular-expressions.html
fand ich das ein sehr nützliches Buch sein:
Dies ist eine gute Antwort, aber es ist nützlich, daran zu denken, dass '\ w' nicht immer äquivalent zu den ASCII-Zeichen' [A-Za-z0-9_] 'ist - es wird auch alphanumerischen Unicode-Codepunkten entsprechen und kann Passen Sie 8-Bit-ISO-Latin-1-Zeichen an, wenn das Gebietsschema entsprechend festgelegt ist. –
- 1. Unterschied b/w String und String
- 2. Unterschied zwischen diesen beiden Befehlen (w & w/out "") und warum?
- 3. Unterschied zwischen einem +++++ b und einem ++ + ++ b
- 4. Unterschied b/w llvm-ld und llvm-link
- 5. Unterschied b/w ng-Modell und Daten-ng-Modell
- 6. Unterschied zwischen r + und w + in fopen()
- 7. String zwischen Zeichenketten regulären Ausdruck
- 8. Was ist der Unterschied b/w setInputPaths (..) und addInputPaths (..)?
- 9. Unterschied zwischen boost :: ref und regulären Referenzen
- 10. Was ist der Unterschied der beiden regulären Ausdruck Zeichen ist \ b und \ <
- 11. SciTE Regex, Ausdruck zwischen x- und y-Zeiten anpassen z. B. \ w * {x, y}
- 12. Unterschied zwischen a - = b und a = a - b in Python
- 13. Unterschied zwischen den regulären Ausdrucksmodifikatoren 'm' und 's'?
- 14. Unterschied zwischen \ r und \ n
- 15. R Unterschied zwischen Ausdruck und as.expression
- 16. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 17. regulären Ausdruck: r05c75 - Zahlen zwischen bookends
- 18. 'zwei' Regulärer Ausdruck zwischen zwei regulären Ausdrücken
- 19. JavaScript regulären Ausdruck wörtliche verharrt zwischen Funktionsaufrufe
- 20. nltk regulären Ausdruck tokenizer
- 21. regulären Ausdruck
- 22. regulären Ausdruck
- 23. Was ist der Unterschied zwischen: update und: w in Vim?
- 24. der Unterschied zwischen `\\ s | *` und `\\ s | [*]` im regulären Ausdruck in r?
- 25. PHP regulären Ausdruck mit Worten
- 26. Unterschied zwischen a || a = b und a = a || b in Rubin?
- 27. Können Metazeichen in einem regulären Ausdruck als normales Zeichen verwendet werden?
- 28. Java RegEx-Metazeichen (.) Und gewöhnlicher Punkt?
- 29. Was ist der Unterschied b/w @RequestParam und @QueryParam Willkürliches Feld ist
- 30. Wie über regulären Ausdruck iterieren
'\ w' steht für ein Wort * Zeichen *, während' \ b' für ein Wort * Grenze zwischen * einem Wortzeichen und einem Nichtwortzeichen steht. Sie sind nicht das Gleiche. – BoltClock