web-dev-qa-db-fra.com

Comment puis-je tester une chaîne entière contre regex en rubis?

Comment puis-je une chaîne contre une expression régulière telle qu'elle retournera vrai si la chaîne entière correspond (pas une sous-chaîne)?

par exemple:

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

Je vous remercie.

48
doctororange

Vous pouvez faire correspondre le début de la chaîne avec \A et la fin avec \Z. Dans Ruby ^ et $ correspond également au début et à la fin de la ligne, respectivement:

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

Cela semble fonctionner pour moi, même si cela semble laid (probablement une façon plus attrayante de le faire):

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

Bien sûr, tout ce qui se trouve à l'intérieur // ci-dessus peut être n'importe quelle expression régulière que vous souhaitez.

Exemple:

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

Remarque: testé dans la console Rails avec Ruby (1.8.7) et Rails (3.1.1)

17
Brian Cordeiro

Donc, ce que vous demandez, c'est comment tester si les deux chaînes sont égales, non? Utilisez simplement l'égalité des chaînes! Cela passe chacun des exemples que vous et Tomas avez cités:

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