文字列:正規表現の単語boundyがこの文字列で機能しないのはなぜですか?
this is something that should work (bs) sdf
正規表現は
\b\(bs\)\b
見つかりませ一致を示しません。どうして?
は、ここでは、Rubularである:スペースと(
と)
と空間の間に単語境界が存在しないので、そこ一致していませんhttp://rubular.com/r/jX2Hy6O0XG
文字列:正規表現の単語boundyがこの文字列で機能しないのはなぜですか?
this is something that should work (bs) sdf
正規表現は
\b\(bs\)\b
見つかりませ一致を示しません。どうして?
は、ここでは、Rubularである:スペースと(
と)
と空間の間に単語境界が存在しないので、そこ一致していませんhttp://rubular.com/r/jX2Hy6O0XG
なぜなら、以下のような理由があります。
ワード境界は
(?: # Cluster start
(?: # -------
^ # Beginning of string anchor
| # or,
(?<= [^a-zA-Z0-9_]) # Lookbehind assertion for a char that is NOT a word
) # -------
(?= [a-zA-Z0-9_]) # Lookahead assertion for a char that is IS a word
| # or,
(?<= [a-zA-Z0-9_]) # Lookbehind assertion for a char that is IS a word
(?: # -------
$ # End of string anchor
| # or,
(?= [^a-zA-Z0-9_]) # Lookahead assertion for a char that is NOT a word
) # -------
) # Cluster end
として定義されているので、
\b\(
試合を何?
(
は言葉ではない場合、\b
は左
すなわちに単語を期待しています。 (?<=[a-zA-Z0-9_])(
。しかし、スペースの前に来るものは、
ですので、一致しません。
)\b
と同じです。つまり、)(?=[a-zA-Z0-9_])
ですが、後に続くのはスペースです。
あなたは空白の境界をご希望の場合は、前後に空白やBOS/EOS位置を保証
(?<!\S)(..)(?!\S)
を使用すると思います。
か、あなたはを確保する必要がある場合は何の単語境界が負のワード境界
\B(..)\B
すべてがデュプリではない – sln
理由があります。
はwhat word boundary matchesを参照してください:最初の文字が単語文字であれば文字列の最初の文字の前に
。
あなたは単語の文字に囲まれていないとき
(?<!\w)\(bs\)(?!\w)
を使用し、(bs)
と一致する必要がある場合はRubular demoを参照してください。
詳細
(?<!\w)
- リテラル文字列(bs)
(?!\w)
- - ワードチャー\(bs\)
、通常のヒントを使用していない:あなたは言葉で囲まれていないとき、 ''(BS)と一致する必要がある場合(?<!\ w)\(bs \)(?!\ w) 'を使用してください。 –
あなたの表現に '<!'の意義が何であるか教えてください。 – Anthony
負のルック・バックです。パターンが現在の位置のすぐ左に一致する場合、一致しない。 –