\w
と\b
の正規表現のメタ文字の違いは誰でも説明できますか?
これらの両方のメタ文字がワード境界に使用されることは私の理解です。これとは別に、どのメタ文字が多言語コンテンツに効果的ですか?
メタキャラクター\b
は、キャレットやドル記号のようなアンカーです。 "単語境界"と呼ばれる位置で一致します。この一致は長さがゼロです。
Wordの境界として認められる3つの異なる位置があります。
簡単に言えば、\b
を使用すると、\bword\b
の形式の正規表現を使用して"whole words only"検索を実行できます。 "単語文字"は、単語の形成に使用できる文字です。 "Word characters"ではないすべての文字は"non-Word characters"です。
すべてのフレーバーで、文字[a-zA-Z0-9_]
はWord文字です。これらは、ショートハンド文字クラス\w
とも一致します。 "ascii"を示すフレーバーは、フレーバー比較のワード境界で、これらのみをワード文字として認識します。
\w
は"Word character"を表し、通常は[A-Za-z0-9_]
です。アンダースコアと数字が含まれていることに注意してください。
\B
は、\b
の否定バージョンです。 \B
は、\b
が一致しないすべての位置で一致します。事実上、\B
は、2つのWord文字の間の任意の位置、および2つの非Word文字の間の任意の位置で一致します。
\W
は、[^\w]
の否定バージョンである\w
の短縮形です。
\w
はWord文字に一致します。 \b
は、片側にWord文字があり、もう一方にWord文字ではないものがある位置文字と一致するゼロ幅一致です。 (Wordの文字ではないものの例には、空白、文字列の先頭と末尾などが含まれます。)
\w
は、"abc def"
のa
、b
、c
、d
、e
、およびf
と一致します。\b
は、"abc def"
のa
の前、c
の後、d
の前、f
の後の(ゼロ幅)位置に一致
@Mahender、おそらく\W
(\w
の代わりに)と\b
の違いを意味します。そうでなければ、上記の@BoltClockと@jwismarに同意します。それ以外の場合は読み続けます。
\W
は、Word以外の文字に一致するため、Wordの境界に一致させるために簡単に使用できます。問題は、行の開始または終了と一致しないことです。 \b
は、行の先頭または末尾にも一致するため、Wordの境界の一致に適しています。大雑把に言えば(経験豊富なユーザーであればここで修正できます)\b
は(\W|^|$)
と考えることができます。 [編集:@Ωmegaが以下で言及しているように、\b
は長さゼロの一致であるため、(\W|^|$)
は厳密には正しくありませんが、できれば差分の説明に役立ちます]
簡単な例:文字列Hello World
の場合、.+\W
はHello_
(スペースを含む)と一致しますが、World
とは一致しません。 .+\b
は、Hello
とWorld
の両方に一致します。
\b <= this is a Word boundary.
Word文字が後に続くがWord文字が前にない位置、またはWord文字が前にあるがWord文字が後にない位置で一致します。
\w <= stands for "Word character".
常にASCII文字と一致します[A-Za-z0-9_]
一致させようとしている具体的なものはありますか?
初心者向け、または単に食欲をそそるための便利な正規表現のウェブサイト。
私はこれが非常に有用な本だとわかりました。
\w
はnot Wordの境界です。アンダースコアを含むすべてのWord文字に一致します:[a-zA-Z0-9_]
。 \b
is Wordの境界、つまり、Wordと英数字以外の文字の位置に一致します:\W
または[^\w]
。
ただし、これらの実装は言語ごとに異なる場合があります。