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 запоминает флаги для каждого выражения; тем самым флаг всего выражения перекрывается.

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Похожие главы из других книг:

Функции XPath для работы с числами

Из книги автора

Функции XPath для работы с числами В XPath имеются следующие функции для работы с числами:• ceiling(). Возвращает наименьшее целое, большее переданного функции числа,• floor(). Возвращает наибольшее целое, меньшее переданного функции числа;• number(). Приводит переданный ей параметр к


3.14.1. Сопоставление с IP-адресом

Из книги автора

3.14.1. Сопоставление с IP-адресом Пусть мы хотим понять, содержит ли строка допустимый IPv4-адрес. Стандартно он записывается в точечно-десятичной нотации, то есть в виде четырех десятичных чисел, разделенных точками, причем каждое число должно находиться в диапазоне от 0 до


5.2. Основные операции над числами

Из книги автора

5.2. Основные операции над числами Обычные операции сложения, вычитания, умножения и деления в Ruby, как и во всех распространенных языках программирования, обозначаются операторами +, -, *, /. Операторы в большинстве своем реализованы в виде методов (и потому могут быть


5.7. Работа с очень большими числами

Из книги автора

5.7. Работа с очень большими числами Управлять массами все равно что управлять немногими: дело в частях и в числе. Сунь-Цзы[9] При необходимости Ruby позволяет работать с произвольно большими целыми числами. Переход от Fixnum к Bignum производится автоматически, прозрачно для


5.9. Работа с рациональными числами

Из книги автора

5.9. Работа с рациональными числами Класс Rational позволяет (во многих случаях) производить операции с дробями с «бесконечной» точностью, но лишь если это настоящие рациональные числа (то есть частное от деления двух целых чисел). К иррациональным числам, например ? или e, он


5.17. Поразрядные операции над числами

Из книги автора

5.17. Поразрядные операции над числами Иногда требуется работать с двоичным представлением объекта Fixnum. На прикладном уровне такая необходимость возникает нечасто, но все-таки возникает.Ruby обладает всеми средствами для таких операций. Для удобства числовые константы


11.7. Инициализация контейнера случайными числами

Из книги автора

11.7. Инициализация контейнера случайными числами ПроблемаТребуется заполнить произвольный контейнер случайными числами.РешениеМожно использовать функции generate и generate_n из заголовочного файла <algorithm> совместно с функтором, возвращающим случайные числа. Пример 11.13


2. Игры с числами

Из книги автора

2. Игры с числами Арифметические развлечения Есть много примеров арифметических игр, головоломок и развлечений. Их можно найти в [BAL], [BER], [KUE]. Мы обращаемся и к другим источникам и добавляем некоторые задачи, которые представляют интерес собственно с точки зрения


2. Игры с числами

Из книги автора

2. Игры с числами Головоломка 3.Я нашел это упражнение в монографии, посвященной языку Пролог. Предложенное там решение действует методом проб и ошибок. Но задача решается намного проще.Как всегда, полностью определим задачу. Искомое число представляется в десятичной


4.6. Операции с комплексными числами

Из книги автора

4.6. Операции с комплексными числами Класс комплексных чисел стандартной библиотеки С++ представляет собой хороший пример использования объектной модели. Благодаря перегруженным арифметическим операциям объекты этого класса используются так, как будто они


Операции с числами

Из книги автора

Операции с числами Перечень арифметических операций в XPath довольно ограничен. К ним относится сложение, вычитание, умножение, деление и унарная операция отрицания, которая меняет значение операнда на противоположное. Кроме того, числа можно сравнивать при помощи


Игры с числами

Из книги автора

Игры с числами Пятница 13(13)Программа должна выдать список из 13 ближайших тринадцатых пятниц, отсчитывая от текущей даты(14)Угадай числоПримерный сценарий:(компьютер) Загадано двух [трех, четырех, пяти] значное число, сколько попыток вам надо для отгадывания?(пользователь)