Регулярные выражения — различия между версиями
Root (обсуждение | вклад) |
Root (обсуждение | вклад) |
||
| Строка 118: | Строка 118: | ||
Символьные классы в регулярных выражениях соответствуют сразу некоторому набору символов. Например, <font color=blue>\d</font> соответствует любой цифре от 0 до 9 включительно, <font color=blue>\w</font> соответствует буквам и цифрам, а <font color=blue>\W</font>— всем символам, кроме букв и цифр. Шаблон, идентифицирующий буквы, цифры и пробел, выглядит так: | Символьные классы в регулярных выражениях соответствуют сразу некоторому набору символов. Например, <font color=blue>\d</font> соответствует любой цифре от 0 до 9 включительно, <font color=blue>\w</font> соответствует буквам и цифрам, а <font color=blue>\W</font>— всем символам, кроме букв и цифр. Шаблон, идентифицирующий буквы, цифры и пробел, выглядит так: | ||
\w\s | \w\s | ||
| + | |||
| + | |||
| + | '''Утверждения''' | ||
| + | Утверждения предоставляют способ сказать: «я хочу найти в этом документе каждое слово, включающее букву “q”, за которой не следует “werty”». | ||
| + | [^\s]*q(?!werty)[^\s]* | ||
| + | Приведенный выше код начинается с поиска любых символов, кроме пробела (<font color=blue>[^\s]*</font>), за которыми следует <font color=blue>q</font>. Затем парсер достигает «смотрящего вперед» утверждения. Это автоматически делает предшествующий элемент (символ, группу или символьный класс) условным — он будет соответствовать шаблону, только если утверждение верно. В нашем случае, утверждение является отрицательным (<font color=blue>?!</font>), т. е. оно будет верным, если то, что в нем ищется, не будет найдено. | ||
| + | |||
| + | Итак, парсер проверяет несколько следующих символов по предложенному шаблону (<font color=blue>werty</font>). Если они найдены, то утверждение ложно, а значит символ <font color=blue>q</font> будет «проигнорирован», т. е. не будет соответствовать шаблону. Если же <font color=blue>werty</font> не найдено, то утверждение верно, и с <font color=blue>q</font> все в порядке. Затем продолжается поиск любых символов, кроме пробела (<font color=blue>[^\s]*</font>). | ||
Версия 11:03, 13 ноября 2020
Квантификаторы
| Аналог | Пример | Описание | |
|---|---|---|---|
| ? | {0,1} | a? | одно или ноль вхождений "а" |
| + | {1,} | a+ | одно или более вхождений "а" |
| * | {0,} | a* | ноль или более вхождений "а" |
Модификаторы
Символ «минус» (-) меред модификатором (за исключением U) создаёт его отрицание.
| Описание | |
|---|---|
| g | глобальный поиск (обрабатываются все совпадения с шаблоном поиска) |
| i | игнорировать регистр |
| m | многострочный поиск. Пояснение: по умолчанию текст это одна строка, с модификатором есть отдельные строки, а значит ^- начало строки в тексте, $- конец строки в тексте. |
| s | текст воспринимается как одна строка, спец символ «точка» (.) будет включать и перевод строки |
| u | используется кодировка UTF-8 |
| U | инвертировать жадность |
| x | игнорировать все неэкранированные пробельные и перечисленные в классе символы |
Спецсимволы
| Аналог | Описание | |
|---|---|---|
| () | подмаска, вложенное выражение | |
| [] | групповой символ | |
| {a,b} | количество вхождений от "a" до "b" | |
| ↓ | логическое "или", в случае с односимвольными альтернативами используйте [] | |
| \ | экранирование спец символа | |
| . | любой символ, кроме перевода строки | |
| \d | [0-9] | десятичная цифра |
| \D | [^\d] | любой символ, кроме десятичной цифры |
| \f | конец (разрыв) страницы | |
| \n | перевод строки | |
| \pL | буква в кодировке UTF-8 при использовании модификатора u | |
| \r | возврат каретки | |
| \s | [ \t\v\r\n\f] | пробельный символ |
| \S | [^\s] | любой символ, кроме пробельного |
| \t | табуляция | |
| \w | [0-9a-z_] | любая цифра, буква или знак подчеркивания |
| \W | [^\w] | любой символ, кроме цифры, буквы или знака подчеркивания |
| \v | вертикальная табуляция |
Спецсимволы внутри символьного класса
| Пример | Описание | |
|---|---|---|
| ^ | [^da] | отрицание, любой символ кроме "d" или "a" |
| - | [a-z] | интервал, любой символ от "a" до "z" |
Позиция внутри строки
| Пример | Соответствие | Описание | |
|---|---|---|---|
| ^ | ^a | aaa aaa | начало строки |
| $ | a$ | aaa aaa | конец строки |
| \A | \Aa | aaa aaa aaa aaa |
начало текста |
| \z | a\Z | aaa aaa aaa aaa |
конец текста |
| \b | a\b \ba |
aaa aaa aaa aaa |
граница слова, утверждение: предыдущий символ словесный, а следующий - нет, либо наоборот |
| \B | \Ba\B | aaa aaa | отсутствие границы слова |
| \G | \Ga | aaa aaa | Предыдущий успешный поиск, поиск остановился на 4-й позиции — там, где не нашлось a |
Якоря
Якоря в регулярных выражениях указывают на начало или конец чего-либо. Например, строки или слова. Они представлены определенными символами. К примеру, шаблон, соответствующий строке, начинающейся с цифры, должен иметь следующий вид:
^[0-9]+
Здесь символ ^обозначает начало строки. Без него шаблон соответствовал бы любой строке, содержащей цифру.
Символьные классы
Символьные классы в регулярных выражениях соответствуют сразу некоторому набору символов. Например, \d соответствует любой цифре от 0 до 9 включительно, \w соответствует буквам и цифрам, а \W— всем символам, кроме букв и цифр. Шаблон, идентифицирующий буквы, цифры и пробел, выглядит так:
\w\s
Утверждения
Утверждения предоставляют способ сказать: «я хочу найти в этом документе каждое слово, включающее букву “q”, за которой не следует “werty”».
[^\s]*q(?!werty)[^\s]*
Приведенный выше код начинается с поиска любых символов, кроме пробела ([^\s]*), за которыми следует q. Затем парсер достигает «смотрящего вперед» утверждения. Это автоматически делает предшествующий элемент (символ, группу или символьный класс) условным — он будет соответствовать шаблону, только если утверждение верно. В нашем случае, утверждение является отрицательным (?!), т. е. оно будет верным, если то, что в нем ищется, не будет найдено.
Итак, парсер проверяет несколько следующих символов по предложенному шаблону (werty). Если они найдены, то утверждение ложно, а значит символ q будет «проигнорирован», т. е. не будет соответствовать шаблону. Если же werty не найдено, то утверждение верно, и с q все в порядке. Затем продолжается поиск любых символов, кроме пробела ([^\s]*).
Примеры
[0-9]{1,3}[\.][0-9]{1,3}[\.][0-9]{1,3}[\.][0-9]{1,3} - ипишка
[0-9]{1,3}[\.]{3}[0-9]{1,3} - ипишка, в более короткой форме
http://website-lab.ru/article/regexp/shpargalka_po_regulyarnyim_vyirajeniyam/