Ruby - регулярные выражения
Регулярное выражение специальная последовательность символов , которая позволяет соответствовать или найти другие строки или наборы строк , используя специализированный синтаксис провел в шаблоне.
Регулярное выражение буквальное является шаблоном между косой чертой или между произвольными разделителями с последующими% г следующим образом: -
Синтаксис
/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 | i Игнорирует регистр при сопоставлении текста. |
2 | o Выполняет интерполяцию # {} только один раз, при первом вычислении литерала регулярного выражения. |
3 | x Игнорирует пробелы и разрешает комментарии в регулярных выражениях. |
4 | m Соответствует нескольким строкам, распознавая символы новой строки как обычные символы. |
5 | u,e,s,n Интерпретирует регулярное выражение как 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
Шаблоны регулярных выражений
За исключением управляющих символов, (+ ? . * ^ $ ( ) [ ] { } | \), все символы совпадают. Вы можете экранировать управляющий символ, поставив перед ним обратную косую черту.
Sr.No. | Узор и описание |
---|---|
1 | ^ Соответствует началу строки. |
2 | $ Соответствует концу строки. |
3 | . Соответствует любому одиночному символу, кроме новой строки. Использование опции m также позволяет сопоставить новую строку. |
4 | [...] Соответствует любому одиночному символу в скобках. |
5 | [^...] Соответствует любому одиночному символу не в скобках |
6 | re* Соответствует 0 или более вхождениям предыдущего выражения. |
7 | re+ Соответствует 1 или нескольким вхождениям предыдущего выражения. |
8 | re? Соответствует 0 или 1 вхождению предыдущего выражения. |
9 | re{ n} Соответствует ровно n повторениям предыдущего выражения. |
10 | re{ n,} Соответствует n или нескольким вхождениям предыдущего выражения. |
11 | re{ n, m} Соответствует минимум n и максимум m вхождениям предыдущего выражения. |
12 | a| b Соответствует либо a, либо b. |
13 | (re) Группирует регулярные выражения и запоминает совпадающий текст. |
14 | (?imx) Временно переключает параметры i, m или x в регулярном выражении. Если указано в скобках, будет затронута только эта область. |
15 | (?-imx) Временно отключает параметры i, m или x в регулярном выражении. Если указано в скобках, будет затронута только эта область. |
16 | (?: re) Группирует регулярные выражения без запоминания совпадающего текста. |
17 | (?imx: re) Временно переключает параметры i, m или x в скобках. |
18 | (?-imx: re) Временно отключает параметры i, m или x в круглых скобках. |
19 | (?#...) Комментарий. |
20 | (?= re) Определяет положение с помощью шаблона. Не имеет диапазона. |
21 год | (?! re) Определяет положение с использованием отрицания шаблона. Не имеет диапазона. |
22 | (?> re) Соответствует независимому шаблону без возврата. |
23 | \w Соответствует символам слова. |
24 | \W Соответствует несловесным символам. |
25 | \s Соответствует пробелу. Эквивалентно [\ t \ n \ r \ f]. |
26 | \S Соответствует пробелам. |
27 | \d Соответствует цифрам. Эквивалентно [0-9]. |
28 | \D Соответствует нецифровым значениям. |
29 | \A Соответствует началу строки. |
30 | \Z Соответствует концу строки. Если новая строка существует, она соответствует непосредственно перед новой строкой. |
31 год | \z Соответствует концу строки. |
32 | \G Точка совпадения, в которой закончился последний матч. |
33 | \b Соответствует границам слова вне скобок. Соответствует пробелу (0x08) внутри скобок. |
34 | \B Соответствует границам без слов. |
35 год | \n, \t, etc. Соответствует символам новой строки, возврата каретки, табуляции и т. Д. |
36 | \1...\9 Соответствует n-му сгруппированному подвыражению. |
37 | \10 Соответствует n-му сгруппированному подвыражению, если оно уже совпало. В противном случае относится к восьмеричному представлению символьного кода. |
Примеры регулярных выражений
Sr.No. | Пример и описание |
---|---|
1 | /ruby/ Спички «Рубин». |
2 | ¥ Соответствует знаку иены. Многобайтовые символы поддерживаются в Ruby 1.9 и Ruby 1.8. |
Sr.No. | Пример и описание |
---|---|
1 | /[Rr]uby/ Соответствует «Рубин» или «Рубин». |
2 | /rub[ye]/ Соответствует «рубин» или «рубин». |
3 | /[aeiou]/ Соответствует любой гласной в нижнем регистре. |
4 | /[0-9]/ Соответствует любой цифре; то же, что и / [0123456789] /. |
5 | /[a-z]/ Соответствует любой строчной букве ASCII. |
6 | /[A-Z]/ Соответствует любой заглавной букве ASCII. |
7 | /[a-zA-Z0-9]/ Соответствует любому из вышеперечисленных. |
8 | /[^aeiou]/ Соответствует чему-либо, кроме гласной строчной буквы. |
9 | /[^0-9]/ Соответствует чему-либо, кроме цифры. |
Sr.No. | Пример и описание |
---|---|
1 | /./ Соответствует любому символу, кроме новой строки. |
2 | /./m В многострочном режиме также соответствует новой строке. |
3 | /\d/ Соответствует цифре: / [0-9] /. |
4 | /\D/ Соответствует нецифровой: / [^ 0-9] /. |
5 | /\s/ Соответствует пробельному символу: / [\ t \ r \ n \ f] /. |
6 | /\S/ Соответствует пробелам: / [^ \ t \ r \ n \ f] /. |
7 | /\w/ Соответствует символу из одного слова: / [A-Za-z0-9 _] /. |
8 | /\W/ Соответствует несловному символу: / [^ A-Za-z0-9 _] /. |
Sr.No. | Пример и описание |
---|---|
1 | /ruby?/ Соответствует "rub" или "ruby": y не является обязательным. |
2 | /ruby*/ Соответствует "руб" плюс 0 или более у. |
3 | /ruby+/ Соответствует «руб» плюс 1 и более у. |
4 | /\d{3}/ Соответствует ровно 3 цифрам. |
5 | /\d{3,}/ Соответствует 3 или более цифрам. |
6 | /\d{3,5}/ Соответствует 3, 4 или 5 цифрам. |
Это соответствует наименьшему количеству повторений -
Sr.No. | Пример и описание |
---|---|
1 | /<.*>/ Жадное повторение: соответствует "<ruby> perl>". |
2 | /<.*?>/ Нежадный: соответствует "<ruby>" в "<ruby> perl>". |
Sr.No. | Пример и описание |
---|---|
1 | /\D\d+/ Нет группы: + повторяет \ d |
2 | /(\D\d)+/ Сгруппировано: + повторяет пару \ D \ d |
3 | /([Rr]uby(, )?)+/ Матч «Рубин», «Рубин, рубин, рубин» и др. |
Это снова соответствует ранее подобранной группе -
Sr.No. | Пример и описание |
---|---|
1 | /([Rr])uby&\1ails/ Соответствует Ruby & Rails или Ruby & Rails. |
2 | /(['"])(?:(?!\1).)*\1/ Строка в одинарных или двойных кавычках. \ 1 соответствует тому, что соответствует первой группе. \ 2 соответствует тому, что соответствует второй группе и т. Д. |
Sr.No. | Пример и описание |
---|---|
1 | /ruby|rube/ Соответствует «рубин» или «рубин». |
2 | /rub(y|le))/ Соответствует «рубину» или «рублю». |
3 | /ruby(!+|\?)/ "рубин", за которым следует один или несколько! или один? |
Необходимо указать позицию совпадения.
Sr.No. | Пример и описание |
---|---|
1 | /^Ruby/ Соответствует «Ruby» в начале строки или внутренней строки. |
2 | /Ruby$/ Соответствует «Ruby» в конце строки или строки. |
3 | /\ARuby/ Соответствует «Ruby» в начале строки. |
4 | /Ruby\Z/ Соответствует «Рубин» в конце строки. |
5 | /\bRuby\b/ Соответствует «Ruby» на границе слова. |
6 | /\brub\B/ \ B не является границей слов: соответствует «rub» в «rube» и «ruby», но не только. |
7 | /Ruby(?=!)/ Соответствует "Ruby", если после него стоит восклицательный знак. |
8 | /Ruby(?!!)/ Соответствует "Ruby", если после него не стоит восклицательный знак. |
Sr.No. | Пример и описание |
---|---|
1 | /R(?#comment)/ Матчи «Р». Все остальное - комментарий. |
2 | /R(?i)uby/ Без учета регистра при сопоставлении "uby". |
3 | /R(?i:uby)/ То же, что и выше. |
4 | /rub(?:y|le))/ Группировать только без создания обратной ссылки \ 1. |
Искать и заменить
Некоторые из наиболее важных методов String, использующих регулярные выражения: sub и gsub, и их варианты на месте sub! и gsub!.
Все эти методы выполняют операцию поиска и замены с использованием шаблона Regexp. Вsub & sub! заменяет первое вхождение шаблона и gsub & gsub! заменяет все вхождения.
В sub и gsub возвращает новую строку, оставляя исходную неизмененной, где как sub! и gsub! изменить строку, в которой они вызываются.
Ниже приведен пример -
#!/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}"
Это даст следующий результат -
Rails are Rails, really good Ruby on Rails