Odpowiedzi:
Metaznak \b
jest kotwicą, podobnie jak daszek i znak dolara. Dopasowuje w pozycji zwanej „granicą słowa” . To dopasowanie ma zerową długość.
Istnieją trzy różne pozycje, które kwalifikują się jako granice słów:
Mówiąc najprościej: \b
umożliwia wyszukanie „tylko całych słów” przy użyciu wyrażenia regularnego w postaci \bword\b
. Znak „Słowo” to znak, który może być używany do tworzenia słów. Wszystkie znaki, które nie są „znakami słownymi”, są „znakami innymi niż słowa” .
We wszystkich odmianach, znaki [a-zA-Z0-9_]
są znakami słownymi. Są one również dopasowywane przez klasę postaci z krótką ręką \w
. Smaki pokazujące „ascii” dla granic słów w porównaniu smaków rozpoznają je tylko jako znaki słów.
\w
oznacza zwykle „znak słowa”[A-Za-z0-9_]
. Zwróć uwagę na podkreślenie i cyfry.
\B
jest zanegowaną wersją \b
. \B
pasuje na każdej pozycji, w której \b
nie. W efekcie \B
dopasowuje w dowolnym miejscu między dwoma znakami słowa, a także w dowolnym miejscu między dwoma znakami innymi niż słowo.
\W
jest skrótem [^\w]
od zanegowanej wersji \w
.
\w
dopasowuje znak słowa. \b
jest dopasowaniem o zerowej szerokości, które pasuje do znaku pozycji, który ma znak słowa po jednej stronie i coś, co nie jest znakiem słowa po drugiej. (Przykłady rzeczy, które nie są znakami słów, obejmują spacje, początek i koniec ciągu itp.)
\w
dopasowania a
, b
, c
, d
, e
, a f
w "abc def"
\b
zgadzał się z (zerowej szerokości) Pozycja przed a
, po c
, przed d
, jak i po f
w"abc def"
\b
twierdzenie o zerowej szerokości; nie pasuje do znaku , dopasowuje pozycję .
@Mahender, prawdopodobnie miałeś na myśli różnicę między \W
(zamiast \w
) a \b
. Jeśli nie, to zgodziłbym się z @BoltClock i @jwismar powyżej. W przeciwnym razie kontynuuj czytanie.
\W
dopasowałby dowolny znak niebędący słowem, więc łatwo jest go użyć do dopasowania granic słów. Problem polega na tym, że nie pasuje do początku lub końca wiersza. \b
jest bardziej odpowiedni do dopasowywania granic słów, ponieważ dopasowuje również początek lub koniec wiersza. Z grubsza rzecz biorąc (bardziej doświadczeni użytkownicy mogą mnie tutaj poprawić) \b
można uznać za (\W|^|$)
. [Edytuj: jak @ Ωmega wspomina poniżej, \b
jest dopasowaniem o zerowej długości, więc (\W|^|$)
nie jest do końca poprawne, ale mam nadzieję, że pomoże wyjaśnić różnicę]
Krótki przykład: dla struny Hello World
, .+\W
by dopasować Hello_
(z miejsca), ale nie będzie pasował World
. .+\b
pasuje zarówno do, jak Hello
i World
.
\b
znaczenia tego samego co (\W|^|$)
, ponieważ (\W|^|$)
będzie zawierał znak niebędący słowem w dopasowanym wyniku. Możesz sprawdzić ten fakt tutaj => regexr.com/3qf98 .
\b
dla mnie oznacza to samo, co (?<=\W|^|$)
gdy jest używane przed wzorem i (?=\W|^|$)
gdy jest używane po wzorze. Możesz sprawdzić, o czym mówię tutaj => regexr.com/3qf9h . Po prostu porównaj z wynikiem \b
zakotwiczeń tutaj => regexr.com/3qf9t
\b <= this is a word boundary.
Dopasowuje pozycję, po której następuje znak słowa, ale nie jest poprzedzona znakiem słowa lub która jest poprzedzona znakiem słowa, ale nie jest poprzedzona znakiem słowa.
\w <= stands for "word character".
Zawsze pasuje do znaków ASCII [A-Za-z0-9_]
Czy jest coś konkretnego, co próbujesz dopasować?
Niektóre przydatne witryny wyrażeń regularnych dla początkujących lub po prostu zaspokajające apetyt.
Uważam, że to bardzo przydatna książka:
\w
nie zawsze jest to odpowiednik znaków ASCII [A-Za-z0-9_]
- będzie również pasować do alfanumerycznych punktów kodowych Unicode i może dopasować 8-bitowe znaki ISO-Latin-1, jeśli ustawienia regionalne są odpowiednio ustawione .
\w
to nie granica słowo, to słowo pasuje dowolny znak podkreślenia, w tym: [a-zA-Z0-9_]
. \b
jest granicą słowa, to znaczy dopasowuje pozycję między słowem a znakiem niealfanumerycznym: \W
lub [^\w]
.
Te implementacje mogą się jednak różnić w zależności od języka.
\w
oznacza słowo charakter , natomiast\b
stanowi wyraz granicę między znakiem słowa i nie ma charakteru tekstu. To nie to samo.