2010-06-11 2 views
45

Я видел это на скринкасте и не мог понять, что это было. Справочные листы просто складывают его с другими операторами в качестве общего оператора сопоставления шаблонов.Что такое оператор «= ~» в Ruby?

+0

Посмотрите его на http://www.ruby-doc.org/core/ – 2010-06-11 20:09:30

+11

@ user97370: Довольно часто рубин документы используются как легкомысленное решение для ответа на все вопросы, не понимая, что рубиновые документы не всегда являются легким для понимания сайтом.Довольно часто (большую часть времени) я начинаю с рубиновых документов, не понимая зашифрованных анемичных объяснений, а затем Google, только для того, чтобы найти в Google никаких решений. Для получения ответа не просто Google «Ruby = ~» или «Ruby = ~ method» или «Ruby = ~ operator». Было бы неплохо видеть, что меньше людей бросают рубиновые документы как ленивое решение и более подробно находят ответы, которые действительно помогают. – Padawan

ответ

42

Он соответствует строке регулярному выражению.

'hello' =~ /^h/ # => 0

Если совпадения нет, то он вернет nil. Если вы передадите ему недопустимые аргументы (т. Е. Левая или правая стороны неверны), он либо выбросит TypeError, либо вернет false.

4

Ну, ссылка правильная, это оператор «соответствует этому регулярному выражению».

if var =~ /myregex/ then something end 
-1

Я считаю, что это оператор сопоставления шаблонов, используемый с регулярным выражением.

15

От ruby-doc:

str =~ obj => fixnum or nil

Match-Если OBJ является Regexp, использовать его в качестве образца для сопоставления с ул и возвращает смещение позиции в матч начинается, или nil, если нет совпадения. В противном случае вызывает obj. = ~, Передавая str в качестве аргумента. Значение по умолчанию = ~ в объекте возвращает false.

"cat o' 9 tails" =~ /\d/ #=> 7 
"cat o' 9 tails" =~ 9  #=> false 
+1

«возвращает позицию, в которой начинается матч», это важный бит для меня :) Промывал Google за ответ. Нашел его здесь спасибо! –

+0

Почему второй пример возвращает false? Это потому, что '9' не является строкой? –

1

регулярные выражения строки:

ставит верно, если URL = ~ /google.com/

Вы можете прочитать '= ~' как 'сопрягает.

4

Как уже было сказано, =~ является регулярным выражением vs string match operator.

Примечание: Оператор =~ не является коммутативной

Пожалуйста, обратите внимание на примечание ниже от ruby doc site, как я видел еще только первая форма

str =~ regexp 

используется в других ответах:

Примечание: str =~ regexp - это не то же самое, что и regexp =~ str. Выбранные строки из названных групп захвата назначаются локальным переменным только во втором случае .

Вот документация для второй формы: link