English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Регулярное выражениеЭто особая последовательность символов, которая использует шаблоны с особыми грамматическими правилами для совпадения или поиска集合 строк.
Регулярное выражение использует заранее определенные специфические символы и их комбинации для создания "правила строки", которая используется для выражения фильтрационной логики для строки.
Регулярное выражениеНа первый взгляд это модель между косыми чертами или между любыми разделителями, которые следуют за %r, как показано ниже:
/pattern/ /pattern/im # Можно указать опции %r!/usr/local! # Использование разделителя в регулярном выражении
#!/usr/bin/ruby line1 = "Cats are smarter than dogs"; line2 = "Dogs also like meat"; if ( line1 =~ /Cats(.*)/ ) puts "Line1 contains Cats" end if ( line2 =~ /Cats(.*)/ ) puts "Line2 contains Dogs" end
Результат выполнения примера выше:
Line1 contains Cats
Регулярное выражение может содержать опциональный модификатор, который используется для управления различными аспектами совпадения. Модификаторы указываются после второго символа косой черты, как показано в примере выше. Ниже приведен список возможных модификаторов:
Модификаторы | Описание |
---|---|
i | Игнорировать регистр при совпадении текста. |
o | Выполнять一次 только #{} интерполяцию, проверять регулярное выражение сразу. |
x | Игнорировать пробельные символы, позволяя вставлять пробельные символы и комментарии во всю выражение. |
m | Совпадение многострочных строк, считая символы перевода строки как обычные символы. |
u,e,s,n | Интерпретировать регулярное выражение как Unicode (UTF-8), EUC, SJIS или ASCII. Если не указан модификатор, то предполагается, что регулярное выражение использует исходную кодировку. |
Как и строки, разделенные %Q, Ruby позволяет использовать %r в начале регулярного выражения, за которым следуют любые разделители. Это очень полезно при описании的大量 символов обратной косой черты, которые вы не хотите экранировать.
# Ниже совпадает с одним символом обратной косой черты, не экранируя. %r|/| # Flag символ может быть настроен с помощью следующей грамматики для совпадения %r[</(.*)>]i
Кроме управляющих символов,(+ ? . * ^ $ ( ) [ ] { } | \)Все другие символы соответствуют себе. Вы можете экранировать управляющие символы,放置一个反斜杠在其前面。
В таблице приведены доступные в 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 | Совпадение с graphic символом. |
\W | Совпадение с негraphic символом. |
\s | Совпадение с пробельным символом. Эквивалентно [\t\n\r\f]. |
\S | Совпадение с ненулевым символом. |
\d | Совпадение с числовым символом. Эквивалентно [0-9]. |
\D | Совпадение с ненумеральным символом. |
\A | Совпадение с началом строки. |
\Z | Совпадение с концом строки. Если есть перевод строки, то совпадение только до перевода строки. |
\z | Совпадение с концом строки. |
\G | Совпадение с последним совпавшим точкой. |
\b | При совпадении вне скоб совпадение с границей слова, при совпадении внутри скоб совпадение с обратным символом (0x08). |
\B | Совпадение с неграничным символом. |
\n, \t, etc. | Совпадение с переводом строки, карридж-ретуэр, табуляцией и т.д. |
\1...\9 | Совпадение с n-ым подвыражением группы. |
\10 | Если уже было совпадение, то совпадение с n-ым подвыражением группы. В противном случае указывает на восьмичастотное представление кода символа. |
Пример | Описание |
---|---|
/ruby/ | Соответствие "ruby" |
¥ | Соответствие символу Yen. Ruby 1.9 и Ruby 1.8 поддерживают несколько символов. |
Пример | Описание |
---|---|
/[Rr]uby/ | Соответствие "Ruby" или "ruby" |
/rub[ye]/ | Соответствует "ruby" или "rube". |
/[aeiou]/ | Соответствие любой малой гласной букве |
/[0-9]/ | Соответствие любому числу, эквивалентно /[0123456789]/ |
/[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"加上0 или более y. |
/ruby+/ | Соответствие "rub"加上1 или более y. |
/\d{3}/ | Точное соответствие 3 чисел. |
/\d{3,}/ | Соответствие 3 или более чисел. |
/\d{3,5}/ | Соответствие 3, 4 или 5 чисел. |
Это будет соответствие минимальному количеству повторений.
Пример | Описание |
---|---|
/<.*>/ | Голодное повторение: соответствие "<ruby>perl>" |
/<.*?>/ | Ненасыщенное повторение: соответствие "<ruby>perl>" с "<ruby>" |
Пример | Описание |
---|---|
/\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 - это не граница слова: соответствует "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! Это изменит строки, которые они вызывают.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- phone = "138-3453-1111 # Это номер телефона" # Удалить комментарии Ruby phone = phone.sub!(/#.*$/, "") puts "Номер телефона: #{phone}" # Удалить все символы, кроме цифр phone = phone.gsub!(/\D/, "") puts "Номер телефона: #{phone}"
Результат выполнения примера выше:
Номер телефона: 138-3453-1111 Номер телефона: 13834531111
#!/usr/bin/ruby # -*- coding: UTF-8 -*- text = "rails является отличной Ruby-фреймворком для Ruby on Rails" # Заменить все "rails" на "Rails" text.gsub!("rails", "Rails") # Заменить все слова "Rails" на заглавные text.gsub!(/\brails\b/, "Rails") puts "#{text}"
Результат выполнения примера выше:
Rails — это отличная Ruby-фреймворк для Ruby on Rails