Регулярное выражение — это специальная последовательность символов, которая помогает вам сопоставлять или находить другие строки или наборы строк, используя специальный синтаксис, содержащийся в шаблоне.
Литерал регулярного выражения — это шаблон между косыми чертами или между произвольными разделителями, за которыми следует% r, как показано ниже:
Синтаксис
/pattern/ /pattern/im # option can be specified %r!/usr/local! # general delimited regular expression
пример
#!/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
Модификаторы регулярного выражения
Литералы регулярных выражений могут включать необязательный модификатор для управления различными аспектами сопоставления. Модификатор указывается после второго символа косой черты, как показано ранее, и может быть представлен одним из этих символов —
Sr.No. | Модификатор и описание |
---|---|
1 |
я Игнорирует регистр при сопоставлении текста. |
2 |
о Выполняет # {} интерполяцию только один раз, при первом вычислении литерала регулярного выражения. |
3 |
Икс Игнорирует пробелы и допускает комментарии в регулярных выражениях. |
4 |
м Соответствует нескольким строкам, распознавая новые строки как нормальные символы. |
5 |
и, е, с, п Интерпретирует регулярное выражение как Unicode (UTF-8), EUC, SJIS или ASCII. Если ни один из этих модификаторов не указан, предполагается, что регулярное выражение использует исходную кодировку. |
я
Игнорирует регистр при сопоставлении текста.
о
Выполняет # {} интерполяцию только один раз, при первом вычислении литерала регулярного выражения.
Икс
Игнорирует пробелы и допускает комментарии в регулярных выражениях.
м
Соответствует нескольким строкам, распознавая новые строки как нормальные символы.
и, е, с, п
Интерпретирует регулярное выражение как Unicode (UTF-8), EUC, SJIS или ASCII. Если ни один из этих модификаторов не указан, предполагается, что регулярное выражение использует исходную кодировку.
Как и строковые литералы, разделенные символом% Q, Ruby позволяет вам начинать регулярные выражения с% r, за которым следует разделитель по вашему выбору. Это полезно, когда шаблон, который вы описываете, содержит много символов прямой косой черты, от которых вы не хотите выходить —
# Following matches a single slash character, no escape required %r|/| # Flag characters are allowed with this syntax, too %r[</(.*)>]i
Шаблоны регулярных выражений
За исключением управляющих символов, (+?. * ^ $ () [] {} | \) , Все символы совпадают. Вы можете избежать управляющего символа, поставив перед ним обратную косую черту.
^
Соответствует началу строки.
$
Соответствует концу строки.
,
Соответствует любому отдельному символу, кроме новой строки. Использование опции m позволяет ему соответствовать новой строке.
[…]
Соответствует любому отдельному символу в скобках.
[^ …]
Соответствует любому отдельному символу не в скобках
ре *
Соответствует 0 или более вхождений предыдущего выражения.
ре +
Соответствует 1 или более вхождению предыдущего выражения.
повторно?
Соответствует 0 или 1 вхождению предыдущего выражения.
re {n}
Совпадает ровно с числом вхождений предыдущего выражения.
re {n,}
Соответствует n или более вхождений предыдущего выражения.
re {n, m}
Соответствует не менее n и не более m вхождений предшествующего выражения.
| б
Соответствует либо a, либо b.
(ре)
Группирует регулярные выражения и запоминает сопоставленный текст.
(? IMX)
Временно переключает параметры i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.
(? -imx)
Временно отключает параметры i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.
(?: re)
Группирует регулярные выражения без запоминания сопоставленного текста.
(? imx: re)
Временно переключает параметры i, m или x в круглых скобках.
(? -imx: re)
Временно отключает параметры i, m или x в скобках.
(? # …)
Комментарий.
(? = re)
Определяет положение с помощью шаблона. Не имеет диапазона.
(?! re)
Определяет положение, используя отрицание шаблона. Не имеет диапазона.
(?> re)
Соответствует независимому образцу без возврата.
\ ш
Соответствует символам слова.
\ W
Соответствует несловесным персонажам.
\ s
Соответствует пробелу. Эквивалентно [\ t \ n \ r \ f].
\ S
Соответствует непробельному пространству.
\ d
Соответствует цифрам. Эквивалентно [0-9].
\ D
Соответствует нецифровым значениям.
\ A
Соответствует началу строки.
\ Z
Соответствует концу строки. Если новая строка существует, она совпадает непосредственно перед новой строкой.
\ г
Соответствует концу строки.
\Г
Точки совпадений, где последний матч закончился.
\ б
Соответствует границам слов, когда они выходят за скобки. Соответствует Backspace (0x08) внутри скобок.
\ B
Соответствует несловесным границам.
\ n, \ t и т. д.
Сопоставляет переводы строк, возврат каретки, вкладки и т. Д.
\ 1 … \ 9
Соответствует n-му сгруппированному подвыражению.
\ 10
Соответствует n-му сгруппированному подвыражению, если оно уже найдено. В противном случае относится к восьмеричному представлению кода символа.
Примеры регулярных выражений
/Рубин/
Матчи «Рубин».
¥
Соответствует знак иены. Многобайтовые символы поддерживаются в Ruby 1.9 и Ruby 1.8.
/ [Rr] убий /
Соответствует «Рубин» или «Рубин».
/ р [вы] /
Соответствует «ruby» или «rube».
/ [AEIOU] /
Соответствует любой строчной гласной.
/ [0-9] /
Соответствует любой цифре; такой же как / [0123456789] /.
/ [AZ] /
Соответствует любой строчной букве ASCII.
/ [AZ] /
Соответствует любой прописной букве ASCII.
/ [A-Za-Z0-9] /
Соответствует любому из вышеперечисленного.
/ [^ AEIOU] /
Совпадает с чем угодно, кроме строчной гласной.
/ [^ 0-9] /
Совпадает с чем угодно, кроме цифры.
/./
Соответствует любому символу, кроме новой строки.
/./m
В многострочном режиме также соответствует символу новой строки.
/ \ д /
Соответствует цифре: / [0-9] /.
/ \ D /
Совпадает с нецифровой цифрой: / [^ 0-9] /.
/ \ s /
Соответствует пробелу: / [\ t \ r \ n \ f] /.
/ \ S /
Совпадает без пробелов: / [^ \ t \ r \ n \ f] /.
/ \ ш /
Соответствует одному слову: / [A-Za-z0-9 _] /.
/ \ W /
Соответствует несловесному символу: / [^ A-Za-z0-9 _] /.
/Рубин?/
Соответствует «rub» или «ruby»: y является необязательным.
/Рубин*/
Совпадения «руб» плюс 0 или более лет.
/ рубин + /
Совпадения «руб» плюс 1 или более лет.
/ \ д {3} /
Соответствует ровно 3 цифрам.
/ \ д {3,} /
Соответствует 3 или более цифрам.
/ \ д {3,5} /
Соответствует 3, 4 или 5 цифрам.
Это соответствует наименьшему количеству повторений —
/<.*>/
Жадное повторение: соответствует «<ruby> perl>».
/<.*?>/
Нежадный: соответствует «<ruby>» в «<ruby> perl>».
/ \ D \ D + /
Нет группы: + повторяется \ d
/ (\ D \ d) + /
Сгруппировано: + повторяет \ D \ d пару
/ ([Rr] uby (,)?) + /
Матч «Рубин», «Рубин, Рубин, Рубин» и др.
Это снова соответствует ранее подобранной группе —
/ ([Rr]) убий & \ 1ails /
Соответствует ruby & rails или Ruby & Rails.
/([‘»])(?:(?!\1).)*\1/
Строка в одинарных или двойных кавычках. \ 1 соответствует любому совпадению 1-й группы. \ 2 соответствует любому совпадению 2-й группы и т. Д.
/ рубин | деревенщина /
Соответствует «ruby» или «rube».
/ р (у | ль)) /
Совпадает с «рубином» или «рублем».
/ рубин (+ |!? \) /
за «рубином» следует один или несколько! или один?
Необходимо указать позицию матча.
/ ^ Рубин /
Соответствует «Ruby» в начале строки или внутренней строки.
/ Рубиновые $ /
Соответствует «Ruby» в конце строки или строки.
/ \ ARuby /
Соответствует «Ruby» в начале строки.
/ Рубин \ Z /
Соответствует «Ruby» в конце строки.
/ \ bRuby \ б /
Совпадает с «Рубином» на границе слова.
/ \ brub \ B /
\ B не является границей слова: соответствует «rub» в «rube» и «ruby», но не в одиночку.
/ Ruby (?! =) /
Совпадает с «Ruby», если за ним следует восклицательный знак.
/Рубин(?!!)/
Совпадает с «Ruby», если после него не стоит восклицательный знак.
/ R (? # Комментарий) /
Спички «R». Все остальное — комментарий.
/ Р (? Я) убий /
Учитывает регистр при сопоставлении «uby».
/ R (I: убий) /
То же, что и выше.
/ р: |) / (у ля?)
Группировать только без создания \ 1 обратной ссылки.
Поиск и замена
Некоторые из наиболее важных методов String, использующие регулярные выражения, — это sub и gsub , а их варианты на месте — sub! и гсуб! ,
Все эти методы выполняют операцию поиска и замены с использованием шаблона Regexp. Sub & Sub! заменяет первое вхождение шаблона и gsub & gsub! заменяет все вхождения.
Sub и gsub возвращают новую строку, оставляя исходную неизмененной где sub! и гсуб! изменить строку, в которой они вызываются.
Ниже приведен пример —
#!/usr/bin/ruby phone = "2004-959-559 #This is Phone Number" # Delete Ruby-style comments phone = phone.sub!(/#.*$/, "") puts "Phone Num : #{phone}" # Remove anything other than digits phone = phone.gsub!(/\D/, "") puts "Phone Num : #{phone}"
Это даст следующий результат —
Phone Num : 2004-959-559 Phone Num : 2004959559
Ниже приведен еще один пример —
#!/usr/bin/ruby text = "rails are rails, really good Ruby on Rails" # Change "rails" to "Rails" throughout text.gsub!("rails", "Rails") # Capitalize the word "Rails" throughout text.gsub!(/\brails\b/, "Rails") puts "#{text}"
Это даст следующий результат —