Регулярные выражения
Регулярные выражения - это отдельный язык, использующийся для поиска текста в строках по определенным правилам. Они позволяют осуществлять быстрый и гибкий поиск, замену и анализ текстов, путем определения образца соответствия, который затем может быть использован для поиска в тексте. В своей повседневной жизни вы постоянно сталкиваетесь так или иначе с регулярными выражениями, просто не замечаете этого. например проверка пароля на сложность на сайте при регистрации, или заполнение номера телефона в правильном формате, все это обычно реализовывают на уровне регулярных выражений.
Регулярные выражения состоят из специальных метасимволов, которые обозначают разные типы символов и операторов, таких как символы-ограничители и флаги соответствия. Эти метасимволы позволяют создавать сложные образцы, которые могут соответствовать различным ситуациям.
Как использовать регулярные выражения в Ruby?
Ruby предоставляет широкий набор методов для работы с регулярными выражениями. Давайте рассмотрим наиболее используемые методы для работы с регулярными выражениями в Ruby:
метод
.match
- используется для поиска соответствия между регулярным выражением и строкой текста. Он возвращает информацию о соответствии.
попробуем сделать тоже самое, но без соотвествия
метод
.scan
- используется для поиска всех соответствий между регулярным выражением и строкой текста. Он возвращает массив со всеми соответствиями.
попробуем сделать тоже самое, но без соотвествия
метод
.gsub
- используется для замены всех соответствий между регулярным выражением и строкой текста на новую строку. Он возвращает новую строку.
метод
.sub
- используется для замены первого соответствия между регулярным выражением и строкой текста на новую строку. Он возвращает новую строку.
Синтаксис регулярных выражений
Регулярные выражения в Ruby помещаются внутрь символов-ограничителей, которые могут быть различными. Наиболее часто используемыми ограничителями являются косые черты / /
, знаки процента %r
и фигурные скобки { }
.
Например, следующий код демонстрирует использование регулярного выражения, заключенного внутрь символов-ограничителей / /
:
В качестве другого примера, следующий код демонстрирует использование регулярного выражения, заключенного внутрь символов-ограничителей %r:
Ruby поддерживает специальные классы символов, которые могут быть использованы в регулярных выражениях для определения определенных типов символов.
Классы символов представляют собой наборы символов, которые могут соответствовать различным типам символов. Например, \d
соответствует цифрам, а \w
соответствует буквам и цифрам.
Рассмотрим наиболее распространенные классы символов в Ruby:
\d
- соответствует цифрам от 0 до 9.
\w
- соответствует буквам и цифрам.
\s
- соответствует пробелам, символам табуляции и переводам строк.
.
- соответствует любому символу.
Операторы сопоставления
Ruby также поддерживает операторы сопоставления, которые могут быть использованы в регулярных выражениях для выполнения специальных операций.
Наиболее распространенными операторами являются:
?
- означает "ноль или один", т.е. соответствует элементу, который может присутствовать в тексте один раз или отсутствовать.
*
- означает "ноль или более", т.е. соответствует элементу, который может присутствовать в тексте ноль или более раз.
+
- означает "один или более", т.е. соответствует элементу, который может присутствовать в тексте один или более раз.
[]
- используется для определения набора символов, которые могут соответствовать одному элементу.
Задание word_splitter
Возьмите английский текст (не менее 100 слов) и напишите программу, которая будет разбивать его на слова и печатать слова в консоли. Знаки препинания не являются частью слова.
Задание phone_checker
Реализуйте удаление лишних символов при вводе номера телефона в консоли и проверку соответствия номера формату мобильных номеров России. Если введённую строку нельзя привести к формату мобильного номера — выводите сообщение о неверном вводе. Телефон может быть введен не только в формате 79091234567, но и с лишними символами.
Пример ввода номеров и результата вывода программы:
Ввод пользователя в консоль | Вывод программы в консоль | Примечание |
---|---|---|
+7 909 123-45-67 | 79091234567 | Символов 11 в номере, код страны 7 — номер верный. |
+7 (909) 1234567 | 79091234567 | Символов 11 в номере, код страны 7 — номер верный. |
8-905-1234567 | 79051234567 | Символов 11 в номере, первый символ 8 (код выхода на мобильный номер) заменяем на код страны 7 — номер верный. |
9-453-1234567 | Неверный формат номера | Символов 11 в номере, первый символ после очистки 9, это не 7 и не 8 — формат номера неверный. |
8-905-123 | Неверный формат номера | Символов 7 в номере — номер неверный. |
905-1234567 | 79051234567 | Количество символов 10 после очистки — значит, приводим к формату номера с 7. |
8-905-12345672342 | Неверный формат номера | Символов в номере больше чем 11 — номер неверный. |
Задание replace_diamonds
Реализуйте метод def search_and_replace_diamonds(text, value, placeholder)
который будет заменять в переданной строке text всё содержимое скобок <value>
и сами скобки на переданную строку в String placeholder, используя регулярные выражения.
Пример:
Учитывайте, что <value>
может встречаться несколько раз в строке
Last updated