ルビーの正規表現

1547 ワード

http://www.w3cschool.cc/ruby/ruby-regular-expressions.html 1つの文字列を完全に一致させるには、例えば“bbbb"/bbb/にマッチングすると、2回のマッチを返します."bbbb".scan(/bbb/)を使用すると、1回だけマッチすることができます.最初のbbbにマッチした後、"bbbb"bbbを文字列から削除します.このように、残りは”b"だけです./bbb/に引き続きマッチできません.じゃ、どうやってマッチングしますか?最初はこう書きました.
for i in 0.."bbbb".size-1    
  "bbbb"[i,"bbb".size] == "bbb"
end
これは絶対だめです.ルビーの精神にあまり合わないので、探してみましたが、本当に解決策があります.しかし、"bbbb".scan(/(?=bbb)/)を返し、["",""]を返したのは"bbbb".scan(/bbb/)です.["bbb"]は何を表していますか?最初のマッチする文字列の位置を見つけたら、この位置の後ろにもマッチする文字列があると思います.これは最初に書いたforサイクルに似ています.
ルビーは文字列を扱う神器と考えられていますが、正規表現や文字列を利用することで、コードが優雅で簡潔になります.この招待状を参考にすればいいです.詳しく書いてあります.http://blog.csdn.net/menxu_ワード/articale/details/9134447ここで特にscanの方法には以下のコードがあります.
TESTSTR = "IIVIIIVIVVIIV"
regexp1 = Regexp.new('IVI|VI|IV|III|V')
regexp2 = Regexp.new('IV|VI|IVI|III|V')
p a = TESTSTR.scan(regexp1) #=>["IVI", "IVI", "V", "VI", "IV"]
p b = TESTSTR.scan(regexp2) #=>["IV", "III", "VI", "V", "VI", "IV"]
正規表現にマッチする項目が複数ある場合は、第1と第3の位置を変換しただけで一致する結果は異なることが見られます.したがって、scanのマッチングはマッチの順番で行われます.scanがサブ文字列にマッチすると、サブ文字列を1つの配列に入れ、元の文字列でマッチするサブ文字列を削除します.複数の整合項の特性を逐次的に整合させることで,正規表現の複数の整合項の順序を並べさえすれば,達成することができます.