SlideShare a Scribd company logo
1 of 13
Регулярные выражения
План лекции
 Понятие и применение
 Элементы языка регулярных выражений
●
Простейшее регулярное выражение
●
Метасимволы и их значение
●
. (Точка)
●
Символьные классы
●
Квантификаторы
●
| (Выбор)
●
Группы
Понятие и применение
Проверка корректности пользовательского ввода
Простейшее регулярное выражение
Метасимволы и их значение
^ $  . [ ] ? * + { } | ( )
. ^ $ + * и т. д.
Определяет любой символ, кроме "n" (новая строка).
. (Точка)
Символьные классы
 [abcdef] - Набор символов. Находит любой из указанных
символов.
 [^abcdef] Исключающий набор символов. Находит любой из
неуказанных символов.
 [a-f] Диапазон символов. Находит любой символ из диапазона.
 [^a-f] - Исключающий диапазон символов. Находит любой
символ, не входящий в диапазон.
Символьные классы (сокращения)
. любой символ
d любая цифра, т.е. [0-9]
D любой символ кроме цифры, т.е. [^d]
w любой символ, образующий «слово», т.е. [A-Za-z0-9_]
W любой символ, НЕ образующий «слово», т.е. [^w]
s любой whitespace символ, т.е. [∙tvrnf]
S любой НЕ whitespace символ, т.е. [^s]
Можно использовать внутри символьного класса:
[ds] – цифры и whitespace символы
Квантификатор
Квантификатор Описание Пример
? 0 или 1 элемент {0,1}
colou?r
color, colour coloor
* 0 или более элементов {0,}
colou*r
color, colour,
colouur
colur
+ 1 или более элементов {1,}
colou+r
colour, colouur color
{n} ровно n элементов
co{2}l
cool cl, col, coool
{m,n} от m от n элементов
co{1,2}l
col, cool cl, coool
| (Выбор)
gray | grey
gray, grey other
gr ( a | e ) y
gray, grey gry, graey
red | green | blue
red, green, blue other
sw ( i | a | u ) m
swim, swam , swum swiim, swiam…
Группы
Выделяет часть выражения в группу. Чтобы
определить символы "(" и ")", следует использовать
"(" и ")".
Если в регулярном выражении необходимо
сослаться на какую-то из предшествующих групп,
следует использовать n, где вместо n подставить
номер нужной группы.
http://regex101.com
http://gskinner.com/RegExr/

More Related Content

Viewers also liked

Polls Are Becoming Increasingly Inaccurate. Why?
Polls Are Becoming Increasingly Inaccurate. Why?Polls Are Becoming Increasingly Inaccurate. Why?
Polls Are Becoming Increasingly Inaccurate. Why?Robert Pressel
 
Docker Containers Deep Dive
Docker Containers Deep DiveDocker Containers Deep Dive
Docker Containers Deep DiveWill Kinard
 

Viewers also liked (6)

Sharon Resume
Sharon  ResumeSharon  Resume
Sharon Resume
 
Polls Are Becoming Increasingly Inaccurate. Why?
Polls Are Becoming Increasingly Inaccurate. Why?Polls Are Becoming Increasingly Inaccurate. Why?
Polls Are Becoming Increasingly Inaccurate. Why?
 
Tang2002MD
Tang2002MDTang2002MD
Tang2002MD
 
Docker Containers Deep Dive
Docker Containers Deep DiveDocker Containers Deep Dive
Docker Containers Deep Dive
 
Modulo 9 Cultura Organizacional
Modulo 9 Cultura OrganizacionalModulo 9 Cultura Organizacional
Modulo 9 Cultura Organizacional
 
Venta de Pacas de Ropa México
Venta de Pacas de Ropa MéxicoVenta de Pacas de Ropa México
Venta de Pacas de Ropa México
 

Регулярные выражения

  • 2. План лекции  Понятие и применение  Элементы языка регулярных выражений ● Простейшее регулярное выражение ● Метасимволы и их значение ● . (Точка) ● Символьные классы ● Квантификаторы ● | (Выбор) ● Группы
  • 3. Понятие и применение Проверка корректности пользовательского ввода
  • 5. Метасимволы и их значение ^ $ . [ ] ? * + { } | ( ) . ^ $ + * и т. д.
  • 6. Определяет любой символ, кроме "n" (новая строка). . (Точка)
  • 7. Символьные классы  [abcdef] - Набор символов. Находит любой из указанных символов.  [^abcdef] Исключающий набор символов. Находит любой из неуказанных символов.  [a-f] Диапазон символов. Находит любой символ из диапазона.  [^a-f] - Исключающий диапазон символов. Находит любой символ, не входящий в диапазон.
  • 8. Символьные классы (сокращения) . любой символ d любая цифра, т.е. [0-9] D любой символ кроме цифры, т.е. [^d] w любой символ, образующий «слово», т.е. [A-Za-z0-9_] W любой символ, НЕ образующий «слово», т.е. [^w] s любой whitespace символ, т.е. [∙tvrnf] S любой НЕ whitespace символ, т.е. [^s] Можно использовать внутри символьного класса: [ds] – цифры и whitespace символы
  • 9. Квантификатор Квантификатор Описание Пример ? 0 или 1 элемент {0,1} colou?r color, colour coloor * 0 или более элементов {0,} colou*r color, colour, colouur colur + 1 или более элементов {1,} colou+r colour, colouur color {n} ровно n элементов co{2}l cool cl, col, coool {m,n} от m от n элементов co{1,2}l col, cool cl, coool
  • 10. | (Выбор) gray | grey gray, grey other gr ( a | e ) y gray, grey gry, graey red | green | blue red, green, blue other sw ( i | a | u ) m swim, swam , swum swiim, swiam…
  • 11. Группы Выделяет часть выражения в группу. Чтобы определить символы "(" и ")", следует использовать "(" и ")". Если в регулярном выражении необходимо сослаться на какую-то из предшествующих групп, следует использовать n, где вместо n подставить номер нужной группы.

Editor's Notes

  1. Данная лекция ориентирована на слушателей курса автоматизации тестирования, начинающих тест разработчиков. Тема данной лекции – (англ. regular expressions)«регулярные выражения». После ее прослушивания вы узнаете, что такое регулярные выражения, для чего они используются, как строятся, а также, узнаете о некоторых популярных онлайн валидаторах RegExp(используются для проверки валидности регулярных выражений). <number>
  2. В данной лекции мы затронем следующие вопросы: - Понятие и применение регулярных выражений - Разберем элементы языка регулярных выражений Простейшие регулярные выражения Метасимволы и их значения .(Точка) Символьные классы Квантификаторы | (Выбор) Группы Жадность(понятие «жадного» RegExp) Лень(понятие «ленивого» RegExp) - Посмотрим на примеры использования - Рассмотрим некоторые онлайн сервисы для проверки регулярных выражений <number>
  3. Регулярные выражения (англ. regular expressions, regexp, regex) — это формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов. По сути это строка-образец (паттерн, шаблон, маска), состоящая из символов и метасимволов и задающая правило поиска.  Многие современные языки программирования имеют встроенную поддержку регулярных выражений. Среди них ActionScript, Perl, Java, PHP, JavaScript, Языки платформы .NET Framework, Python, Tcl, Ruby, Lua, Gambas, C++ (стандарт 2011 года), Delphi, D и др. Регулярные выражения используются некоторыми текстовыми редакторами и утилитами для поиска и подстановки текста. Например, при помощи регулярных выражений можно задать шаблоны, позволяющие: - найти все последовательности символов «кот» в любом контексте, как то: «кот», «котлета», «терракотовый»; - найти отдельно стоящее слово «кот» и заменить его на «кошка»; - найти слово «кот», которому предшествует слово «персидский» или «чеширский»; - убрать из текста все предложения, в которых упоминается слово кот или кошка. <number>
  4. При использовании простых символов для них ищется прямое соответствие. Например,/regular expression/ совпадает с комбинацией символов в строке только тогда, когда подстрока ‘regular expression' встречается именно в таком порядке и именно с таким количеством пробелов между словами. Совпадение будет найдено в строках "I'm studing regular expression" и "I'm studing regular expression for two days". В обоих случаях строка содержит подстроки ‘regular expression'. Но в строке "I'm studing regular(RegExp) expression" совпадений нет, потому что она не содержит в себе точной последовательности символов соответствующей ‘regular expression'. <number>
  5. Шаблон, формируемый при помощи регулярных выражений, может состоять как из обычных символов, так и метасимволов. На слайде приведены наиболее распространенные метасимволы. 1. Метасимвол . (точка) означает один любой символ, но в некоторых реализациях исключая символ новой строки. 2. […] - Соответствует одному символу из тех, что перечислены в квадратных скобках, например, выражение [0123456789] соответствует одной цифре, выражение может быть свернуто в последовательность [0-9] 3. [^…] - Соответствует одному любому символу, не перечисленному в квадратных скобках, например, выражение [^0-9] соответствует любому символу, не являющемуся цифрой 4. ^ - Позиция в начале строки, например, выражение ^flag соответствует любой строке, начинающейся со слова flag 5. $ - Позиция в конце строки, например, выражение ^fl$ соответствует строке, содержащей лишь два символа fl, а строке flag регулярное выражение уже не будет соответствовать 6.| - Любое из разделяемых выражений, например, выражение first|second соответствует любой строке, содержащей либо слово first, либо слово second 7. (…) - Круглые скобки служат для логического объединения частей регулярного выражения Если искомая строка сама содержит метасимволы, их следует экранировать. Например, для поиска подстроки"ссылка [9]", где вместо цифры 9 может стоять любая другая цифра, может использоваться регулярное выражение: "ссылка \[[0-9]\]" Таким образом, для поиска квадратных скобок их необходимо экранировать, чтобы интерпретатор регулярных выражений не воспринимал их как начало символьного класса. <number>
  6. Метасимвол . (точка) означает один любой символ, но в некоторых реализациях исключая символ новой строки. <number>
  7. 1. […] — символьные классы, позволяют перечислить символы, которые могут находиться в данной позиции текста. Например gr[ea]y совпадет со строками «grey» и «gray». 2. [^…] — исключающие символьные классы, позволяют перечислить символы, которые не могут находиться в данной позиции текста. Например g[^ae]rdy не совпадет со строками «gardy» и «gerdy», но совпадет со строками «gurdy», «g3rdy» и «girdy». 3. [a-f] Диапазон символов. Находит любой символ из диапазона. 4. [^a-f] - Исключающий диапазон символов. Находит любой символ, не входящий в диапазон <number>
  8. Некоторые символьные классы можно заменить специальными метасимволами: \d - Цифровой символ [0-9] \D - Нецифровой символ [^0-9] \s - Пробельный символ [ \f\n\r\t\v] \S - Непробельный символ [^ \f\n\r\t\v] \w - Буквенный или цифровой символ или знак подчёркивания [[:word:]] \W - Любой символ, кроме буквенного или цифрового символа или знака подчёркивания [^[:word:]] <number>
  9. Квантификатор после символа, символьного класса или группы определяет, сколько раз предшествующее выражение может встречаться. Следует учитывать, что квантификатор может относиться более чем к одному символу в регулярном выражении, только если это символьный класс или группа. 1. {n} - Число повторений ровно n раз 2. {m,n} - Число повторений от m до n включительно 3. {m,} - Число повторений не менее m 4. {,n} - Число повторений не более n 5. ? - Число повторений ноль или одно{0,1} 6. * - Число повторений ноль или более{0,} 7. + -Число повторений одно или более{1,} Часто используется последовательность .* для обозначения любого количества любых символов между двумя частями регулярного выражения. Символьные классы в сочетании с квантификаторами позволяют устанавливать соответствия с реальными текстами. Например, столбцами цифр, телефонами, почтовыми адресами, элементами  HTML-разметки и др. Если символы { } не образуют квантификатор, их специальное значение игнорируется. <number>
  10. «|» - конструкция выбора, любое из перечисленных выражений. Во многих реализациях регулярных выражений существует возможность выбирать, по какому пути пойдёт проверка в том или ином месте регулярного выражения на основании уже найденных значений. (?(?=если)то|иначе) - Если операция просмотра успешна, то далее выполняется часть то, иначе выполняется часть иначе. В выражении может использоваться любая из четырёх операций просмотра. Следует учитывать, что операция просмотра нулевой ширины, поэтому части то в случае позитивного или иначе в случае негативного просмотра должны включать в себя описание шаблона из операции просмотра. (?(n)то|иначе) - Если n-я группа вернула значение, то поиск по условию выполняется по шаблону то, иначе по шаблону иначе. <number>
  11. Обозначение группы Круглые скобки используются для определения области действия и приоритете операций. Шаблон внутри группы обрабатывается как единое целое и может быть квантифицирован. Например, выражение (тр[ау]м-?)* найдёт последовательность вида трам-трам-трумтрам-трум-трамтрум. Обратная связь Одно из применений группировки — повторное использование ранее найденных групп символов (подстрок, блоков, отмеченных подвыражений). При обработке выражения подстро́ки, найденные по шаблону внутри группы, сохраняются в отдельной области памяти и получают номер начиная с единицы. Каждой подстроке соответствует пара скобок в регулярном выражении. Квантификация группы не влияет на сохранённый результат, то есть сохраняется лишь первое вхождение. Обычно поддерживается до 9 нумерованных подстрок с номерами от 1 до 9, но некоторые интерпретаторы позволяют работать с бо́льшим количеством. Впоследствии в пределах данного регулярного выражения можно использовать обозначения от \1 до\9 для проверки на совпадение с ранее найденной подстрокой. Например, регулярное выражение (та|ту)-\1 найдёт строку та-та или ту-ту, но пропустит строку та-ту. Также ранее найденные подстро́ки можно использовать при замене по регулярному выражению. В таком случае в замещающий текст вставляются те же обозначения, что и в пределах самого выражения. Группировка без обратной связи Если группа используется только для группировки и её результат в дальнейшем не потребуется, то можно использовать группировку вида (?:шаблон). Под результат такой группировки не выделяется отдельная область памяти и, соответственно, ей не назначается номер. Это положительно влияет на скорость выполнения выражения, но понижает удобочитаемость. Атомарная группировка Атомарная группировка вида (?>шаблон), так же как группировка без обратной связи, не создаёт обратных связей. В отличие от неё, такая группировка запрещает возвращаться назад по строке, если часть шаблона уже найдена. Атомарная группировка выполняется ещё быстрее, чем группировка без обратной связи, и сохраняет процессорное время при выполнении остального выражения, так как запрещает проверку любых других вариантов внутри группы, когда один вариант уже найден. Это очень полезно при оптимизации групп со множеством различных вариантов. <number>
  12. В сети есть множество онлайн сервисов для проверки корректности написания регулярных выражений. На слайде отображен интерфейс одного из них. Regex101 — сайт, позволяющий тестировать регулярные выражения. В частности, он позволяет узнать, на какую именно часть текста сработало определенное выражение.Сайт состоит из 2 полей, в которые необходимо ввести регулярное выражение (без ограничителей по краям, за которые приняты стандартные «/») и флаги (необязательно). Также надо скопировать в поле текст, на котором проверяется выражение. При этом обработка производится автоматически по мере заполнения полей. В случае, если в тексте найдено совпадение, будет отображена именно совпавшая часть. <number>
  13. Gskinner(интерфейс отображен на слайде) - считается одним из лучших онлайн валидаторов RegExp. Выбор валидатора – дело вкуса каждого, т.к у всех относительно схожий функционал и интерфейс. <number>