2

\Bとについて少し概念を理解しました\b。そして、(インターネットから取得した)コードを試してみましたが、それを理解できませんでした-それらによって出力がどのように生成されたかregexp Anchors。Rubyでのアプローチ方法を内部的に言うことで、\Bとの違いを理解するのを手伝ってくれる人はいますか?\bpattern matching

Interactive ruby ready.
> str = "Hit him on the head\­n" +
      "Hit him on the head with a 2×4\n­"
=> "Hit him on the head
Hit him on the head with a 2??4
"
> str.scan(/­\w+\B/)
=> ["Hi", "hi", "o", "th", "hea", "Hi", "hi", "o", "th", "hea", "wit"]
> str.scan(/­\w+\b/)
=> ["Hit", "him", "on", "the", "head", "Hit", "him", "on", "the", "head", "with", "a", "2", "4"]
> 

ありがとう、

4

1 に答える 1

6

ほとんどの小文字/大文字のペアと同様に、それらは正反対です。

\b単語の境界に一致します。つまり、一方が単語に属し、もう一方が属さない2つの文字で一致します(幅がゼロの一致であるため、一致するときに文字を消費しません)。「<code>thisperson」というテキストで\bは、次の位置に一致します(縦棒で示されます):「<code> | this | |人|」。

\B単語の境界以外の場所に一致します。「<code>t| h | i | sp | e | r | s | o | n」–つまり、すべての文字の間で一致しますが、文字と非文字文字の間では一致しません。

したがって、\w+\b「<code> this person」があり、一致すると、結果として「<code> this」が得られます。これは、貪欲であり、次の単語境界まで可能な限り+多くの単語文字()に一致するためです。\w

\w+\B同様に動作しますが、「<code> this」の後に単語境界が続くため、「<code>this」と一致することはできません。これは\B禁止されています。したがって、エンジンは1つの文字をバックトラックし、代わりに「<code>thi」と一致します。

于 2013-01-16T15:21:04.253 に答える