2016-08-26 8 views
1

単語「"the"」に文字「t」の前にスペースがあり、文字「e」の後ろに「the the the」という文字列があります。私は正規表現の下で使用していますが、それは2単語の代わりに"the"という単語を1つだけ与えています。'the'Ruby正規表現:文字列から単語を見つけることができません

s="the the the the" 
s.scan(/\sthe\s/) 
output - [" the "] 

私はトウの中間語「the」を返すと期待していました。なぜこれが起こっているのですか?

答えて

1

ここでの問題は、\sのパターンの消費の空白です。 scanメソッドはと重複していないと一致し、一致すると予想される一致はであり、一致するのはです。あなたはマッチの重複取得するlooakroundsを使用する必要が

/(?<=\s)the(?=\s)/ 

regex demoRuby demoputs s.scan(/(?<=\s)the(?=\s)/)プリント2つのtheのインスタンスを参照してください。

パターンは詳細:

  • (?<=\s) - the
  • theの直前に存在する空白を必要と正の後読み - リテラルテキストthe
  • (?=\s) - 必要と肯定先読みをtheの直後の空白。

あなたは\bthe\b(すなわち、使用ワード境界)を使用する場合ことに注意してください、あなただけの単語の文字(文字、数字またはアンダースコア)の前または後の位置をアサート\bとしてあなたの文字列からすべてのtheのインスタンスを取得します。

+0

"?<="および "?="は何の略語ですか?私はrubular.comでその説明を見つけることができません –

関連する問題