web-dev-qa-db-ja.com

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

\w\bの正規表現のメタ文字の違いは誰でも説明できますか?

これらの両方のメタ文字がワード境界に使用されることは私の理解です。これとは別に、どのメタ文字が多言語コンテンツに効果的ですか?

130
Mahender

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

Wordの境界として認められる3つの異なる位置があります。

  • 文字列の最初の文字の前(最初の文字がWord文字の場合)。
  • 文字列の最後の文字の後(最後の文字がWord文字の場合)。
  • 文字列内の2文字の間。1文字はWord文字で、もう1文字はWord文字ではありません。

簡単に言えば、\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の短縮形です。

235
Ωmega

\wはWord文字に一致します。 \bは、片側にWord文字があり、もう一方にWord文字ではないものがある位置文字と一致するゼロ幅一致です。 (Wordの文字ではないものの例には、空白、文字列の先頭と末尾などが含まれます。)

\wは、"abc def"abcde、およびfと一致します。
\bは、"abc def"aの前、cの後、dの前、fの後の(ゼロ幅)位置に一致

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

20
jwismar

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

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

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

6
mtariq
\b <= this is a Word boundary.

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

\w <= stands for "Word character". 

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

一致させようとしている具体的なものはありますか?

初心者向け、または単に食欲をそそるための便利な正規表現のウェブサイト。

私はこれが非常に有用な本だとわかりました。

4
james emanon

\wnot Wordの境界です。アンダースコアを含むすべてのWord文字に一致します:[a-zA-Z0-9_]\bis Wordの境界、つまり、Wordと英数字以外の文字の位置に一致します:\Wまたは[^\w]

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

2
Julián Urbano