Ruby Регулярные выражения
Регулярные выражения— это специальная последовательность символов, которая сопоставляет или выполняет поиск по коллекции строк с помощью шаблона со специальным синтаксисом.
Регулярные выражения используют предопределённый набор определённых символов и комбинаций этих символов для формирования "строки правил", которая используется для выражения логики фильтрации строк.
Синтаксис
Регулярные выраженияБуквально, это шаблон между слэшами или между произвольными разделителями после %r, как показано ниже:
Примеры
Попробуйте »
Вывод приведенного выше примера:
Line1 contains Cats
Модификаторы регулярных выражений
Литерал регулярного выражения может содержать необязательный модификатор для управления различными аспектами сопоставления. Модификатор указывается после второго символа косой черты, как показано в примере выше. В следующей таблице перечислены возможные модификаторы:
| Модификатор | Описание |
|---|---|
| i | Игнорировать регистр при сопоставлении текста. |
| o | Выполнять интерполяцию #{} только один раз; регулярное выражение вычисляется при первом использовании. |
| x | Игнорировать пробелы, позволяя размещать пробельные символы и комментарии внутри всего выражения. |
| m | Сопоставлять несколько строк, распознавая символы новой строки как обычные символы. |
| u,e,s,n | Интерпретировать регулярное выражение как Unicode (UTF-8), EUC, SJIS или ASCII. Если модификатор не указан, считается, что регулярное выражение использует исходную кодировку. |
Так же как строки ограничиваются с помощью %Q, Ruby позволяет использовать %r в качестве начала регулярного выражения, за которым следует любой разделитель. Это очень полезно при описании шаблонов, содержащих много символов косой черты, которые вы не хотите экранировать.
Шаблоны регулярных выражений
За исключением управляющих символов,(+ ? . * ^ $ ( ) [ ] { } | \)все остальные символы сопоставляются сами с собой. Вы можете экранировать управляющие символы, поставив перед ними обратную косую черту.
В следующей таблице перечислен синтаксис регулярных выражений, доступный в Ruby.
| Паттерн | Описание |
|---|---|
| ^ | Совпадает с началом строки. |
| $ | Совпадает с концом строки. |
| . | Совпадает с любым одиночным символом, кроме символа новой строки. С опцией m также совпадает с символом новой строки. |
| [...] | Совпадает с любым одиночным символом в квадратных скобках. |
| [^...] | Совпадает с любым одиночным символом, не входящим в квадратные скобки. |
| re* | Совпадает с предыдущим подвыражением ноль или более раз. |
| re+ | Совпадает с предыдущим подвыражением один или более раз. |
| re? | Совпадает с предыдущим подвыражением ноль или один раз. |
| re{ n} | Совпадает с предыдущим подвыражением ровно n раз. |
| re{ n,} | Совпадает с предыдущим подвыражением n или более раз. |
| re{ n, m} | Совпадает с предыдущим подвыражением не менее n раз и не более m раз. |
| a| b | Совпадает с a или b. |
| (re) | Группирует регулярное выражение и запоминает совпавший текст. |
| (?imx) | Временно включает опцию i, m или x внутри регулярного выражения. Если находится внутри круглых скобок, это влияет только на часть внутри круглых скобок. |
| (?-imx) | Временно отключает опцию i, m или x внутри регулярного выражения. Если находится внутри круглых скобок, это влияет только на часть внутри круглых скобок. |
| (?: re) | Группирует регулярное выражение, но не запоминает совпавший текст. |
| (?imx: re) | Временно включает опции i, m или x внутри круглых скобок. |
| (?-imx: re) | Временно отключает опции i, m или x внутри круглых скобок. |
| (?#...) | Комментарий. |
| (?= re) | Задаёт позицию с помощью шаблона. Не имеет диапазона. |
| (?! re) | Задаёт позицию с помощью шаблона с отрицанием. Не имеет диапазона. |
| (?> re) | Сопоставляет независимый шаблон без обратного отслеживания. |
| \w | Сопоставляет словесный символ. |
| \W | Сопоставляет несловесный символ. |
| \s | Сопоставляет пробельный символ. Эквивалентно [\t\n\r\f]. |
| \S | Соответствует непробельному символу. |
| \d | Соответствует цифре. Эквивалентно [0-9]. |
| \D | Соответствует нецифровому символу. |
| \A | Соответствует началу строки. |
| \Z | Соответствует концу строки. Если существует перевод строки, совпадает только перед ним. |
| \z | Совпадает с концом строки. |
| \G | Соответствует позиции, в которой завершилось последнее совпадение. |
| \b | Соответствует границе слова вне квадратных скобок; внутри квадратных скобок соответствует символу возврата на одну позицию (0x08). |
| \B | Соответствует негранице слова. |
| \n, \t и т. д. | Соответствует переводу строки, возврату каретки, табуляции и т. д. |
| \1...\9 | Соответствует n-му сгруппированному подвыражению. |
| \10 | Если оно уже было сопоставлено, соответствует n-му сгруппированному подвыражению. В противном случае оно обозначает восьмеричное представление кодировки символа. |
Примеры регулярных выражений
Символы
| Примеры | Описание |
|---|---|
| /ruby/ | Соответствует "ruby" |
| ¥ | Соответствует знаку иены. Ruby 1.9 и Ruby 1.8 поддерживают несколько символов. |
Классы символов
| Примеры | Описание |
|---|---|
| /[Rr]uby/ | Соответствует "Ruby" или "ruby" |
| /rub[ye]/ | Совпадает с "ruby" или "rube" |
| /[aeiou]/ | Соответствует любой строчной гласной |
| /[0-9]/ | Соответствует любой цифре, так же как / |
| /[a-z]/ | Соответствует любой строчной букве ASCII |
| /[A-Z]/ | Соответствует любой прописной букве ASCII |
| /[a-zA-Z0-9]/ | Соответствует любому символу в квадратных скобках |
| /[^aeiou]/ | Соответствует любому символу, который не является строчной гласной |
| /[^0-9]/ | Совпадает с любым нецифровым символом |
Специальные классы символов
| Примеры | Описание |
|---|---|
| /./ | Совпадает с любым символом, кроме новой строки |
| /./m | Соответствует также символу новой строки в многострочном режиме |
| /\d/ | Соответствует цифре, эквивалентно /[0-9]/ |
| /\D/ | Соответствует нецифровому символу, эквивалентно /[^0-9]/ |
| /\s/ | Соответствует пробельному символу, эквивалентно /[ \t\r\n\f]/ |
| /\S/ | Соответствует непробельному символу, эквивалентно /[^ \t\r\n\f]/ |
| /\w/ | Соответствует словесному символу, эквивалентно /[A-Za-z0-9_]/ |
| /\W/ | Соответствует несловесному символу, эквивалентно /[^A-Za-z0-9_]/ |
Повторение
| Примеры | Описание |
|---|---|
| /ruby?/ | Соответствует "rub" или "ruby". Символ y необязателен. |
| /ruby*/ | Совпадает с "rub" плюс ноль или более y. |
| /ruby+/ | Совпадает с "rub" плюс одна или более y. |
| /\d{3}/ | Совпадает ровно с 3 цифрами. |
| /\d{3,}/ | Совпадает с 3 или более цифрами. |
| /\d{3,5}/ | Совпадает с 3, 4 или 5 цифрами. |
Нежадное повторение
Это совпадает с наименьшим числом повторений.
| Примеры | Описание |
|---|---|
| /<.*>/ | Жадное повторение: совпадает с "<ruby>perl>" |
| /<.*?>/ | Нежадное повторение: совпадает с "<ruby>" в "<ruby>perl>" |
Группировка с помощью круглых скобок
| Примеры | Описание |
|---|---|
| /\D\d+/ | Без группировки: + повторяет \d |
| /(\D\d)+/ | С группировкой: + повторяет пару \D\d |
| /([Rr]uby(, )?)+/ | Совпадает с "Ruby", "Ruby, ruby, ruby" и т. д. |
Обратные ссылки
Это снова совпадает с ранее совпавшей группой.
| Примеры | Описание |
|---|---|
| /([Rr])uby&\1ails/ | Совпадает с ruby&rails или Ruby&Rails |
| /(['"])(?:(?!\1).)*\1/ | Строки в одинарных или двойных кавычках. \1 соответствует символам, сопоставленным первой группой, \2 — символам, сопоставленным второй группой, и так далее. |
Чередование
| Примеры | Описание |
|---|---|
| /ruby|rube/ | Совпадает с "ruby" или "rube" |
| /rub(y|le)/ | Совпадает с "ruby" или "ruble" |
| /ruby(!+|\?)/ | "ruby", за которым следует один или несколько символов ! или один символ ? |
Якорь
Это требует указания позиции совпадения.
| Примеры | Описание |
|---|---|
| /^Ruby/ | Совпадает со строкой или строкой, начинающейся с "Ruby" |
| /Ruby$/ | Совпадает со строкой или строкой, заканчивающейся на "Ruby" |
| /\ARuby/ | Совпадает со строкой, начинающейся с "Ruby" |
| /Ruby\Z/ | Совпадает со строкой, заканчивающейся на "Ruby" |
| /\bRuby\b/ | Совпадает с "Ruby" на границе слова |
| /\brub\B/ | \B — это не граница слова: совпадает с "rub" в "rube" и "ruby", но не с отдельным "rub" |
| /Ruby(?=!)/ | Совпадение с "Ruby", если далее следует восклицательный знак |
| /Ruby(?!!)/ | Совпадение с "Ruby", если далее не следует восклицательный знак |
Специальный синтаксис для круглых скобок
| Примеры | Описание |
|---|---|
| /R(?#comment)/ | Совпадение с "R". Все остальные символы — комментарии. |
| /R(?i)uby/ | Без учёта регистра при сопоставлении "uby". |
| /R(?i:uby)/ | То же, что и выше. |
| /rub(?:y|le))/ | Только группа, без обратной ссылки \1 |
Поиск и замена
subиgsubи их переменные подстановкиsub!иgsub!являются важными строковыми методами при использовании регулярных выражений.
Все эти методы выполняют операции поиска и замены с использованием шаблонов регулярных выражений.subиsub!Заменяют первое вхождение шаблона,gsubиgsub!Заменяет все вхождения шаблона.
subиgsubВозвращают новую строку, оставляя исходную строку неизменной, тогда какsub!иgsub!изменяет строку, для которой они вызваны.
Примеры
Попробуйте »
Вывод приведенного выше примера:
电话号码 : 138-3453-1111 电话号码 : 13834531111
Примеры
Попробуйте »
Вывод приведенного выше примера:
Rails 是 Rails, Ruby on Rails 非常好的 Ruby 框架Другие расширения