web-dev-qa-db-ja.com

ルビーの正規表現に対して完全な文字列をテストするにはどうすればよいですか?

whole文字列が(部分文字列ではなく)一致する場合にtrueを返すように、正規表現に対する文字列をどのようにすればよいですか?

例えば:

test( \ee\ , "street" ) #=> returns false
test( \ee\ , "ee" ) #=> returns true!

ありがとうございました。

48
doctororange

文字列の先頭を\Aと、末尾を\Zと一致させることができます。 In Ruby ^および$は、それぞれ行の先頭と末尾にも一致します。

>> "a\na" =~ /^a$/
=> 0
>> "a\na" =~ /\Aa\Z/
=> nil
>> "a\na" =~ /\Aa\na\Z/
=> 0
69

これは私にとってはうまくいくように見えますが、lookいように見えます(おそらくより魅力的な方法です):

!(string =~ /^ee$/).nil?

もちろん、上記の//内のすべてが、任意の正規表現になります。

例:

>> string = "street"
=> "street"
>> !(string =~ /^ee$/).nil?
=> false
>> string = "ee"
=> "ee"
>> !(string =~ /^ee$/).nil?
=> true

注:Rails console with Ruby(1.8.7)およびRails(3.1.1)でテスト済み

17
Brian Cordeiro

だから、あなたが求めているのは、2つの文字列が等しいかどうかをテストする方法ですよね?文字列の等価性を使用してください!これは、あなたとTomasの両方が引用したすべての例に合格します。

'ee'   == 'street' # => false
'ee'   == 'ee'     # => true
"a\na" == 'a'      # => false
"a\na" == "a\na"   # => true
3
Jörg W Mittag