Ruby/Практикум/Правила: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 27:
<source lang=ruby>str = "Сегодня 3 декабря 2007... или 29 июня 987 года... хз, короче"
p str.scan(/(?:[1-9]|[12][\d]|[3][01])\s+(?:декабря|января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября)\s+(?:[1-9]{1}\d*)/)</source>
 
4) По моему так будет проще. Коментарии в коде.
<source lang=ruby>
puts str.scan(/
\s+ # Пробелы перед числом
( # Начало групы возврата
\d\d? # Число одна или две цифры. Зачем проверять на неграмотность?
# Тогда нужно проверять и на соответствие дней в месяце.
# Например 30 Февраля или 31 Апреля.
\s+ # Пробелы перед месяцем
(?:декабря|января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября)
\s+ # Пробелы перед годом
\d{1,4} # Любые цифры от одной до четырёх если кто захочет
# в древнейшей истории покапаться. Ну или в будущее заглянуть
) # Закрываем группу возврата
# Здесь проверки на пробел или знак препинания нет.
# Зачем проверять опечатку типа 2017год или 2017...
/ixu) # Месяц может быть написан как заглавными так и прописными
# Многострочное регулярное выражение
# Юникод
</source>
 
=== Дана строка. Необходимо найти максимальное из имеющихся в ней вещественных чисел. ===