-
Регулярное выражение:
Регулярные выражения позволяют пользователям создавать шаблон соответствия, используя ряд специальных символов, а затем сравнивать шаблон соответствия с целевыми объектами, такими как файлы данных, входные данные программы и входные данные формы на веб-страницах. В зависимости от того, содержит ли объект сравнения совпадение. шаблон, выполните соответствующую программу. Регулярность завоевала любовь программистов своей простотой, практичностью и скоростью. 
Некоторые мысли о написании регулярных выражений:
1. Сначала определитесь с правилами. Какую строку вам нужно сопоставить, из каких частей она состоит и какими характеристиками обладает.
2. Предложите наименьшую единицу. Иногда некоторые правила сопоставления повторяются. Можно попытаться найти общие точки и спланировать их в правило.
3. Напишите обычные правила одно за другим в соответствии с их правилами и наименьшими единицами.
4. Объедините комбинацию этих единичных закономерностей, чтобы сформировать нужную вам полную закономерность.
Здесь нам нужно понять некоторые основные теги и их использование. Любые правила состоят из основных тегов. Обычная разметка также очень проста, так что вы можете ее понять.
Часто используемые теги в регулярных выражениях
1 Часто используемые маркеры в регулярных выражениях 2 ^ | Начало строки или строки 3 $ | Символы, отличные от символов новой строки 5 w | Символы слова (цифры, буквы или символы подчеркивания) 6 W | Символы, не являющиеся словами 7 d | Числа (эквивалент [0–9]) 8 D | Символы, не являющиеся пробелами 9 10 A | Начало строки 11 Z | Конец строки или последний символ новой строки 12 z | Конец строки 13 14 s | Пустой символ 15 S | Непустой символ 16 17 b | Граница слова (вне []) 18 B | Пробел (внутри []) 20 [ ] | Любой символ в наборе с дефисом посередине представляет диапазон, например: [0-9], [az]21 | 0 или 1 предыдущее выражение 22 | 25 * | ноль или более предыдущих выражений 26 *? | ноль или более предыдущих выражений (не жадный) 27 + | 1 или более предыдущих выражений 28 +? | 1 или более предыдущих выражений (не жадный) 29 {m,n} | mn предыдущих выражений 30 {m,n}? | mn предыдущих выражений (не жадный) 31 32 33 Также {?=} { ?!} (?>) (?#) (?imx-imx) и т. д.
Самый простой пример:
1 # Сопоставить всю строку 2 puts /ruby/ =~ "ruby" # 0 3 puts /ruby/ =~ "Ruby" # nil 4 5 # Сопоставить начало и конец строки или строки 6 str = "abcdef" 7 puts str 8 puts /^abc/ =~ str # 0 9 puts /def$/ =~ str # 310 11 str = "abcndefn" 12 puts /^abc/ =~ str # 013 puts /def$/ =~ str # 414 puts /abc/ =~ str # 015 puts /def/ =~ str # 416 17 #Сопоставить начало и конец самой строки 18 str = "abcndefn" 19 puts /Aabc/ =~ str # 020 puts /defZ/ =~ str # 421 puts /defz/ =~ str # nil22 23 #Сопоставить символы слова 24 puts "Сопоставить символы слова" 25 шаблон = /w/26 puts шаблон = ~ "abc " # 027 помещает шаблон =~ "." # nil28 29 # Целое число совпадений 30 # d Число 31 # D Нечисловое значение 32 помещает "Номер совпадения" 33 помещает /d/ =~ "122" #034 puts /D / =~ "122" #nil35 puts /D/ =~ "abc" #036 37 38 #Border 39 str = "Это твой друг!"40 puts str41 puts str.gsub(/b/ ,"|" ) # |Это| |ваш| |друг|!42 puts str.gsub(/B/,"-") # Это ваш друг!-43
Экземпляр квалификатора
1 ставится "квалификатор" 2 ставится "квалификатор: *" 3 ставится /(abc)*/ =~ "a" # 0 4 ставится /(abc)*/ =~ "abc" # 0 5 6 7 ставится "квалификатор Квалификатор: +" 8 ставит /(abc)+/ =~ "a" # ноль 9 ставит /(abc)+/ =~ "abc" # 010 11 ставит "Квалификатор: ?" 12 ставит /(abc)?/ =~ " c" # 013 помещает /(abc)?/ =~ "abc" # 014 15 16 помещает "Квалификатор: {n}"17 помещает /(abc){2}/ =~ "abc" # nil18 помещает /(abc) {2}/ =~ "abcabc" # 019 20 помещает "Квалификатор: {n,}"21 помещает /(abc){2,}/ =~ "abc" # nil22 помещает /(abc){ 2,}/ = ~ "abcabc" # 023 24 помещает "Квалификатор: {n,m}" 25 помещает /(abc){2,3}/ =~ "abc" # nil26 помещает /(abc){2, 3}/ =~ " abcabcabc" # 027 28 ставит "Квалификатор: *?" 29 ставит /(abc)*?/ =~ "a" # 030 ставит /(abc)*?/ =~ "abcabc" # 031 32 ставит "Квалификатор: +? " 33 ставит /(abc)+?/ =~ "a" # nil34 ставит /(abc)+?/ =~ "abcabc" # 035 36 ставит "Квалификатор: ??"37 ставит /(abc)??/ = ~ "a" #038 puts /(abc)??/ =~ "abcabc" #039 40 41 #match, {1} {3}42 # {3} может совпадать, тогда {1} обязательно совпадет, но обратное неверно 43 # Диапазон соответствия: {1} > {3}
Распространенные примеры:
1 ставит «пример» 2 #Соответствие телефонным номерам: 3 #Обычно китайские телефонные номера состоят из 7–8 цифр, коды городов — целые числа из 3–4 цифр, первая цифра кода города — 0, а разделитель «-» — используется посередине 4 #Обратите внимание на первое и последнее ограничения Символ 5 шаблон = /^0d{2,3}-d{7,8}$/ 6 ставит шаблон =~ "010-82809999" # 0 7 puts шаблон =~ "00010-82809999" # nil 8 9 #Соответствие номеру мобильного телефона 10 # Начиная с 1, вторая цифра - 3, 5, 8, 11 цифр 11 шаблон = /^1[3,5,8] d{9}$/12 puts шаблон =~ "15810990001" #013 14 #ID-карта номер 15 шаблон = /d{18}|d{15}/16 17 #Match IP18 #Четыре группы целых чисел не больше 255, разделенный '.' 19 помещает "IP" 20 num = /^d|[01]?d{1,2}|2[0-4]d|25[0-5]/21 шаблон = /^(#{num}.){3} #{num}$/22 #Целое: шаблон = /^(^d|[01]?d{1,2}|2[0- 4]d|25[0-5].) {3}^d|[01]?d{1,2}|2[0-4]d|25[0-5]$/ 23 puts шаблон =~ "127.0.0.1" # 024 puts шаблон =~ "254.255.255.255"25 26 #Сопоставить адрес электронной почты 27 шаблон = /^w+@w+.w+$/ #Это не имеет '-' 28 шаблон = /^[w-]+@[w- ]+.[w-]+$/29 помещает шаблон =~ " [email protected] " #030 31 # Сопоставить url32 # http:// www.google.cn33 шаблон = /(http|https|ftp): (//|\\)((w)+[.]){1,}(net|com|cn|org| cc|tv|[0-9]{1,3})( ((/[~]*|\[~]*)34 (w)+)|[.](w)+ )*(((([?](w)+){ 1}[=]*))*((w)+){1}([&](w)+[=]( w)+)*)*/35 36 помещает шаблон =~ " http://www.google.cn?uid=123 " #0
другой
Значение жадности
1 ставит "жадный" 2 #Жадный означает соответствие максимально длинной строке 3 # '.' Значение: символы, отличные от символов новой строки 4 str = "там, где море встречается с залитой луной землей" 5 ставит str 6 match = /.* the/.match(str) 7 помещает match[0] # там, где море встречается с, * жадно. Если вы не хотите жадничать, добавьте + '?' 8 #*?non-greedy 9 match = /.*?the/.match(str)10 помещает match[0] # где the11 12 str.insert( 0,"Hello n")13 match = /.*?the/.match(str)14 помещает match[0] #где
Позитивное и негативное превью
1 #Позитивный и негативный просмотр 2 ставит "Позитивный и негативный просмотр" 3 s1 = "Словарь Нового Мира" 4 s2 = "Симфония Нового Мира" 5 s3 = "Новый Мировой Порядок" 6 7 reg = /Новый Мир (?=Словарь| Symphony)/ 8 m1 = reg.match(s1) 9 помещает m1.to_a[0] # "Новый мир"10 m2 = reg.match(s2)11 помещает m2.to_a[0] # "Новый мир"12 помещает reg .match(s3) # nil13 14 помещает "негативный превью"15 16 reg = /New World (?!Symphony)/ # После "New World" "Симфонии" нет 17 помещает reg.match(s1).to_a[0 ] # "Новый мир"18 помещает reg.match(s2).to_a[0] # nil19 помещает reg.match(s3).to_a[0] # "Новый мир"
-