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