Книга: Программирование на языке Ruby
3.14.3. Сопоставление с числами, записанными римскими цифрами
3.14.3. Сопоставление с числами, записанными римскими цифрами
Следующее довольно сложное регулярное выражение сопоставляется с любым правильно записанным римскими цифрами числом (до 3999 включительно). Как и раньше, для удобства восприятия образец разбит на части:
rom1 = /m{0,3}/i
rom2 = /(d?c{0,3}|с[dm])/i
rom3 = /(l?x{0,3}|x[lс])/i
rom4 = /(v?i{0,3}|i[vx])/i
roman = /^#{rom1}#{rom2}#{rom3}#{rom4}$/
year1985 = "MCMLXXXV"
if year1985 =~ roman # Печатается: "да"
puts "да"
else
puts "нет"
end
Возможно, у вас появилось искушение поставить в конец всего выражения модификатор i
, чтобы сопоставлялись и строчные буквы:
# Это не работает!
rom1 = /m{0,3}/
rom2 = /(d?c{0,3}|с[dm])/
rom3 = /(l?x{0,3}|x[lс])/
rom4 = /(v?i{0,3}|i[vx])/
roman = /^#{rom1}#{rom2}#{rom3}#{rom4}$/i
Почему такое выражение не годится? Взгляните на этот пример и поймете:
rom1.to_s # "(?-mix:m{0,3})"
Обратите внимание, что метод to_s
запоминает флаги для каждого выражения; тем самым флаг всего выражения перекрывается.
- 3.14.1. Сопоставление с IP-адресом
- 3.14.2. Сопоставление с парой «ключ-значение»
- 3.14.3. Сопоставление с числами, записанными римскими цифрами
- 3.14.4 Сопоставление с числовыми константами
- 3.14.5 Сопоставление с датой и временем
- 3.14.6. Обнаружение повторяющихся слов в тексте
- 3.14.7. Поиск слов, целиком набранных прописными буквами
- 3.14.8. Сопоставление с номером версии
- 3.14.9. Еще несколько образцов
- 3.14.5 Сопоставление с датой и временем
- 3.14.8. Сопоставление с номером версии
- 3.14.7. Поиск слов, целиком набранных прописными буквами
- 3.14.2. Сопоставление с парой «ключ-значение»
- 2.2. Арифметические операции над числами, представленными в различных системах счисления
- 2.2. Сопоставление
- Выражения с двумя цифрами
- 12.7.1. Простое сопоставление с шаблоном: fnmatch()
- 13.3.3. Работа с множественными числами: ngettext()
- ПРИЛОЖЕНИЕ Б Сопоставление функций Windows, UNIX и библиотеки С
- Сопоставление с UNIX и библиотекой С
- Исключения, возникающие при выполнении операций над числами с плавающей точкой