\ wと\ bの正規表現のメタ文字の違い


142

\b\w正規表現のメタキャラクターの違いを誰かが説明できますか?これらの両方のメタ文字が単語の境界に使用されることは私の理解です。これとは別に、どのメタ文字が多言語コンテンツに効率的ですか?


11
\wは単語文字\b表し、単語文字と非単語文字の間の単語境界を表します。彼らは同じものではありません。
BoltClock

回答:


259

メタキャラクター\bは、キャレットやドル記号のようなアンカーです。「単語境界」と呼ばれる位置でマッチします。この一致は長さがゼロです。

単語境界と見なされる3つの異なる位置があります。

  • 文字列の最初の文字の前、最初の文字が単語文字の場合。
  • 文字列の最後の文字の後、最後の文字が単語文字の場合。
  • 文字列内の2つの文字の間。一方は単語文字で、もう一方は単語文字ではありません。

簡単に言うと、の形式の正規表現を使用して「単語のみ」の検索を\b実行できます。「単語文字は」単語を形成するために使用できる文字です。「単語文字」以外のすべての文字は「非単語文字」です。\bword\b

すべてのフレーバーで、文字[a-zA-Z0-9_]は単語文字です。これらは、省略文字クラスによっても一致し\wます。フレーバー比較で単語境界に「ascii」を示すフレーバーは、これらのみを単語文字として認識します。

\w通常は「単語文字」を表し[A-Za-z0-9_]ます。下線と数字が含まれていることに注意してください。

\Bはの否定バージョンです\b\B一致\bしないすべての位置で一致します。事実上、\B2つの単語文字間の任意の位置と、2つの非単語文字間の任意の位置で一致します。

\W以下のために短い[^\w]の否定バージョン、\w


21

\w単語文字に一致します。\b幅がゼロの一致で、片側に単語文字があり、もう一方には単語文字ではない位置文字に一致します。(単語文字ではないものの例には、空白、文字列の最初と最後などがあります。)

\wマッチabcde、及びf"abc def"
\bマッチ(ゼロ幅)位置の前a、後c、前d、および後f"abc def"

参照:http : //www.regular-expressions.info/reference.html/


3
単語文字と文字列の先頭または末尾にある場合、単語文字と文字列の先頭または末尾の間でも一致するため、単語文字ではなく単語文字の境界であると言う方がより正確です。
MRAB 2012

5
それはまだ完全に正しくありません。 \bゼロ幅アサーション。文字とは一致せず、位置と一致します。
アランムーア

10

@Mahender、あなたはおそらく\W(の代わりに\w)との違いを意味しました\b。そうでない場合は、上記の@BoltClockおよび@jwismarに同意します。それ以外の場合は読み続けます。

\W単語以外の文字と一致するため、単語の境界を一致させるためにそれを使用するのは簡単です。問題は、行の最初または最後と一致しないことです。\b行の先頭または末尾にも一致するため、単語境界の一致により適しています。大まかに言えば(経験豊富なユーザーはここで私を修正できます)\bはと考えることができます(\W|^|$)。[編集:@Ωmegaが以下で言及するように、\b長さがゼロの一致なので(\W|^|$)、厳密には正しくありませんが、うまくいけばdiffの説明に役立ちます]

簡単な例:文字列のHello World場合、(スペースと).+\Wは一致しますが、は一致しHello_ませんWorld.+\bとの両方に一致HelloWorldます。


と一致\bすることに同意しません。一致する結果に単語以外の文字が含まれる(\W|^|$)から(\W|^|$)です。この事実はここで確認できます=> regexr.com/3qf98
Victor

\b私にとっては(?<=\W|^|$)、パターンの前(?=\W|^|$)に使用した場合とパターンの後に使用した場合と同じです。ここで私が話していることを確認できます=> regexr.com/3qf9h\bここのアンカーの結果と比較してください=> regexr.com/3qf9t
Victor

4
\b <= this is a word boundary.

単語文字が後に続くが単語文字が前にない、または単語文字が前にあるが単語文字が後にない位置で一致します。

\w <= stands for "word character". 

常にASCII文字に一致します[A-Za-z0-9_]

あなたがマッチしようとしている特定のものはありますか?

初心者のための、または単にあなたの食欲を濡らすためのいくつかの有用な正規表現のウェブサイト。

私はこれがとても役に立つ本だとわかりました:


5
これは良い答えですが\w、ASCII文字と常に同等であるとは限らないことを覚えておくと便利です。これは[A-Za-z0-9_]英数字のUnicodeコードポイントにも一致し、ロケールが適切に設定されている場合は8ビットのISO-Latin-1文字に一致する場合があります。 。
Tim Pierce

2

\wは単語の境界ではなく、アンダースコアを含むすべての単語文字に一致します[a-zA-Z0-9_]\b 、それは単語と英数字以外の文字の間に位置と一致し、ある単語の境界、:\W[^\w]

ただし、これらの実装は言語によって異なる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.