Как работает оператор \ / в регулярном выражении ruby?

Я использую Ruby 1.9.3. Просто пройдемся по руководствам по Ruby. Теперь я просто застрял в заявлении, в котором регулярное выражение работает и выдает также put. Но путаница с логикой \/ операторов.

RegExp-1

Today's date is: 1/15/2013. (строка)

(?<month>\d{1,2})\/(?<day>\d{1,2})\/(?<year>\d{4}) (Выражение)

RegExp-2

s = 'a' * 25 + 'd' 'a' * 4 + 'c' (строка)

/(b|a+)*\/ =~ s #=> (выражение)

Теперь не мог понять, как в Ruby работают операторы \/ и =~.

Может ли кто-нибудь отсюда помочь мне понять то же самое?

Спасибо


person DoLoveSky    schedule 15.01.2013    source источник
comment
\/ предназначен для экранирования /, иначе выражение преждевременно закроется. Ваше последнее выражение недействительно. Также stackoverflow.com/questions/5781362/ruby-operator для объяснения оператора =~   -  person Lee Jarvis    schedule 15.01.2013
comment
Вы задаете вопрос, на который могли бы ответить, просто попробовав его сами?   -  person Lee Jarvis    schedule 15.01.2013


Ответы (1)


\ служит escape-символом. В этом контексте он используется, чтобы указать, что следующий символ является нормальным и не должен выполнять какую-либо особую функцию. обычно / завершает регулярное выражение, поскольку регулярные выражения заполняются /. но перед / с \ в основном говорится: «Я не говорю вам заканчивать регулярное выражение, когда я использую это /, я хочу, чтобы это было частью регулярного выражения».

Как отметил Ли, ваше второе регулярное выражение недействительно, особенно потому, что вы никогда не заканчиваете регулярное выражение правильным /. вы избегаете последнего /, так что это просто текстовый символ, поэтому регулярное выражение зависает. это как делать str = "hello.

в качестве другого примера, обычно ^ используется в регулярном выражении для обозначения начала строки, но выполнение \^ означает, что вы просто хотите использовать символ ^ в регулярном выражении.

=~ говорит: "Соответствует ли регулярное выражение строке?" Если есть совпадение, он возвращает индекс начала совпадения, в противном случае возвращает nil. Дополнительные сведения см. В этом вопросе.

РЕДАКТИРОВАТЬ: Обратите внимание, что элементы ?<month>, ?<day>, ?<year> группируются. похоже, вы могли бы немного улучшить регулярное выражение, посмотрите это приложение своего рода, чтобы увидеть, что делают все разные специальные символы.

person Eric    schedule 15.01.2013
comment
Не могли бы вы сказать мне, каков результат этого выражения (?<month>\d{1,2})\/(?<day>\d{1,2})\/(?<year>\d{4})? - person DoLoveSky; 15.01.2013
comment
нет выхода. это просто регулярное выражение (при условии, что вы зарезервировали его в /). - person Eric; 15.01.2013
comment
если вы пытаетесь увидеть, как это регулярное выражение соответствует строке, указанной в вопросе, попробуйте сами! rubular - отличный инструмент для тестирования регулярных выражений ruby. Вы также можете войти в консоль ruby ​​и попробовать сопоставить регулярное выражение со строкой, используя мы обсуждали оператор = ~. - person Eric; 15.01.2013
comment
@DoLoveSky, не троллите голоса за. Они произойдут, когда люди почувствуют, что ваш вклад достоин этого. Их просьба вызовет раздражение у людей и приведет к обратному результату. Вместо этого задавайте хорошие, хорошо продуманные и хорошо заданные вопросы и дайте твердые краткие ответы, и вы получите голоса. - person the Tin Man; 15.01.2013
comment
@DoLoveSky, ты читал ответ? Там написано If there is a match, it returns the index of the start of the match. - person the Tin Man; 16.01.2013
comment
Да, теперь я знаю об этом! Когда я спросил, я был сбит с толку. После этого я провел небольшое исследование и понял суть дела! - person DoLoveSky; 16.01.2013