2016-07-20 3 views
-1

Rubyの正規表現の予想外の結果

"test bold bind abcd".scan(/\Ab.../) {|x| puts x} 

Iはb次に、文字列の先頭を示し、三任意の文字れ、\Aを用います。私の意見では、それが出力すべき:

bold 
bind 

が、それは何も出力しません。なぜこの正規表現は私が期待しているものとは異なる動作を説明することができますか?

+3

"文字列の開始"は、 "文字列の開始" _を意味します。これは、 "単語の先頭"でもなく、 "他のものの開始"でもありません。 – mudasobwa

答えて

4

文字列の先頭が「テスト」なので、一致しません。あなたが正規表現をテストするためのきちんとしたツールがある認識していなかった場合には

/\bb.../ 

http://rubular.com/

Regex Tutorialから関連する引用:

あなたはワード境界演算子を使用することができます

\ Aは、文字列の先頭でのみ一致します。同様に、\ Zのみ は文字列の最後に一致します。この2つのトークンは、改行で一致することはありません( )。これは、 チュートリアルで議論されているすべての正規表現の味で、「マルチラインモード」をオンにしても同じです。 EditPad Proと PowerGREPでは、キャレットとドルが常に先頭で一致し、 行の末尾にある\ Aと\ Zは、ファイル全体の先頭と末尾にのみ一致します。