回答:
メタキャラクター\b
は、キャレットやドル記号のようなアンカーです。「単語境界」と呼ばれる位置でマッチします。この一致は長さがゼロです。
単語境界と見なされる3つの異なる位置があります。
簡単に言うと、の形式の正規表現を使用して「単語のみ」の検索を\b
実行できます。「単語文字は」単語を形成するために使用できる文字です。「単語文字」以外のすべての文字は「非単語文字」です。\bword\b
すべてのフレーバーで、文字[a-zA-Z0-9_]
は単語文字です。これらは、省略文字クラスによっても一致し\w
ます。フレーバー比較で単語境界に「ascii」を示すフレーバーは、これらのみを単語文字として認識します。
\w
通常は「単語文字」を表し[A-Za-z0-9_]
ます。下線と数字が含まれていることに注意してください。
\B
はの否定バージョンです\b
。\B
一致\b
しないすべての位置で一致します。事実上、\B
2つの単語文字間の任意の位置と、2つの非単語文字間の任意の位置で一致します。
\W
以下のために短い[^\w]
の否定バージョン、\w
。
\w
単語文字に一致します。\b
幅がゼロの一致で、片側に単語文字があり、もう一方には単語文字ではない位置文字に一致します。(単語文字ではないものの例には、空白、文字列の最初と最後などがあります。)
\w
マッチa
、b
、c
、d
、e
、及びf
で"abc def"
\b
マッチ(ゼロ幅)位置の前a
、後c
、前d
、および後f
に"abc def"
\b
ゼロ幅アサーション。文字とは一致せず、位置と一致します。
@Mahender、あなたはおそらく\W
(の代わりに\w
)との違いを意味しました\b
。そうでない場合は、上記の@BoltClockおよび@jwismarに同意します。それ以外の場合は読み続けます。
\W
単語以外の文字と一致するため、単語の境界を一致させるためにそれを使用するのは簡単です。問題は、行の最初または最後と一致しないことです。\b
行の先頭または末尾にも一致するため、単語境界の一致により適しています。大まかに言えば(経験豊富なユーザーはここで私を修正できます)\b
はと考えることができます(\W|^|$)
。[編集:@Ωmegaが以下で言及するように、\b
長さがゼロの一致なので(\W|^|$)
、厳密には正しくありませんが、うまくいけばdiffの説明に役立ちます]
簡単な例:文字列のHello World
場合、(スペースと).+\W
は一致しますが、は一致しHello_
ませんWorld
。.+\b
との両方に一致Hello
しWorld
ます。
\b
私にとっては(?<=\W|^|$)
、パターンの前(?=\W|^|$)
に使用した場合とパターンの後に使用した場合と同じです。ここで私が話していることを確認できます=> regexr.com/3qf9h。\b
ここのアンカーの結果と比較してください=> regexr.com/3qf9t
\b <= this is a word boundary.
単語文字が後に続くが単語文字が前にない、または単語文字が前にあるが単語文字が後にない位置で一致します。
\w <= stands for "word character".
常にASCII文字に一致します[A-Za-z0-9_]
あなたがマッチしようとしている特定のものはありますか?
初心者のための、または単にあなたの食欲を濡らすためのいくつかの有用な正規表現のウェブサイト。
私はこれがとても役に立つ本だとわかりました:
\w
、ASCII文字と常に同等であるとは限らないことを覚えておくと便利です。これは[A-Za-z0-9_]
英数字のUnicodeコードポイントにも一致し、ロケールが適切に設定されている場合は8ビットのISO-Latin-1文字に一致する場合があります。 。
\w
は単語文字を\b
表し、単語文字と非単語文字の間の単語境界を表します。彼らは同じものではありません。