Регулярные выражения — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
Строка 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/