Как проверить целую строку на регулярное выражение в рубине? - PullRequest
48 голосов
/ 10 февраля 2010

Как мне сопоставить строку с регулярным выражением, чтобы она возвращала истину, если строка целом соответствует (не подстроке)?

например:

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

Спасибо.

Ответы [ 3 ]

69 голосов
/ 10 февраля 2010

Вы можете сопоставить начало строки с \A и конец с \Z. В ruby ​​^ и $ соответствуют также начало и конец строки соответственно:

>> "a\na" =~ /^a$/
=> 0
>> "a\na" =~ /\Aa\Z/
=> nil
>> "a\na" =~ /\Aa\na\Z/
=> 0
17 голосов
/ 13 декабря 2011

Мне кажется, что это работает, хотя выглядит уродливо (возможно, это более привлекательно):

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

Конечно, все, что внутри // выше, может быть любым регулярным выражением.

Пример:

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

Примечание: протестировано в консоли Rails с ruby ​​(1.8.7) и rails (3.1.1)

3 голосов
/ 10 февраля 2010

Итак, вы спрашиваете, как проверить, равны ли две строки, верно? Просто используйте равенство строк! Это проходит каждый из примеров, приведенных вами и Томасом:

'ee'   == 'street' # => false
'ee'   == 'ee'     # => true
"a\na" == 'a'      # => false
"a\na" == "a\na"   # => true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...