2015-02-08 3 views
0

Мне нужно регулярное выражение, которое соответствует точно 1-12 и 1-31. 01 не соответствует, а 65 не соответствует. Например, «abc 6 abc» является совпадением, а «abc 65» - нет.Как совместить ненулевую цифру в рубине с помощью регулярных выражений?

Я пробую это /[1-9]|1[012]/, который не работает.

ответ

1

Вам нужно добавить границы слов вокруг вашего шаблона. \b соответствует символу слова и символу, отличному от слова.

Для 1-12

/\b(?:1[012]|[1-9])\b/ 

Для 1-31

\b(?:[12]\d|3[01]|[1-9])\b 
+0

Я предполагаю, что вместо этого вы можете использовать группу захвата или добавить два '\ b' и не иметь группы. Верный? –

+0

да, ты прав. Но он расширяет регулярное выражение. –

0

На мой взгляд, это работа не для одного регулярного выражения. Не будет ли трудно понять этот код, когда вы заглянете к нему через несколько лет? Почему бы не разделить его на две части?

my_string = 'abc 01 def' 
my_string2 = 'abc 8 def' 

p ('1'..'12').include?(my_string[/\d+/]) #=> false 
p ('1'..'12').include?(my_string2[/\d+/]) #=> true 
Смежные вопросы