При написании регулярного выражения можно пользоваться обозначениями, привёденными в таблице:
Представление | Значение | Эквивалент | Комментарий | Пример |
---|---|---|---|---|
\w |
любая буква | [А-яA-zЁё] |
Буква кириллического/латинского алфавитов вне зависимости от регистра. Буквы с диакритиками (Àà Èè Ùù Éé Çç Åå ) и особые буквы некоторых алфавитов (æ ø ), буквы других алфавитов (арабского, китайского) ловиться не будут, а также цифры и нижнее подчёркивание не ловятся |
Пет\w – "Петя", "Пете", "Петю" "Петр" и т.д.\wоля – "Коля", "коля", "Толя", и т.д. |
\W |
не буква | [^А-яA-zЁё] |
Небуквенные знаки (- ! , . ? % ; № ), буквы с диакритиками и нетипичные буквы алфавитов, составленных на основе латиницы или кириллицы (например, корякскую ӄ ), а также буквы не кириллического/латинского алфавитов. |
|
\d |
любая цифра | [0-9] |
||
\D |
не цифра | [^0-9] |
Также пробел и перенос строки | |
\s |
пробел | ( ) |
Также табуляция | |
\S |
не пробел | [^ ] |
Также не табуляция | |
[] |
символьный класс | Внутри скобок задаются символы, один из которых может встретиться в перехватываемой строке | Пет[яюе] – "Петя", "Пете", "Петю"[0-9] – все цифры от нуля до девяти[А-я] (или [А-Яа-я] ) – все буквы русского алфавита, кроме Ёё [А-Г] (или [АБВГ] ) – русские заглавные буквы от А до Г [А-о] – все русские заглавные буквы, кроме Ё , а также русские строчные буквы от а до о , за исключением ё Внутри квадратных скобок можно задавать одновременно и записанный с помощью дефиса символьный класс, и ряд обычных символов: [A-zА-я0-9Ёё!,%] |
|
[^] |
исключение из набора | [^0-9] – не цифра |
||
* |
ноль или более | {0,} |
Квантификатор ставится после символа, группы или символьного класса. Является жадным | [0-9]* – любое количество цифр, в том числе и ни одной цифры |
+ |
один или более | {1,} |
Квантификатор ставится после символа, группы или символьного класса. Является жадным | \w+ – минимум одна буква |
? |
ноль или один | {0,1} |
Квантификатор ставится после символа, группы или символьного класса. | Петр(ушка)? – реагирует как на "Петр", так и на "Петрушка" |
() |
группировка | Заключённое в скобки выражение рассматривается как единое целое | О(хо)+ – "Охо", "Охохохохохохо", и т.п. |
|
{} |
количество повторений | Ставится после символа, группы или символьного класса | [0-9]{9} – девять любых цифр подряд[0-9]{2,11} – от двух до одиннадцати любых цифр подряд\w{0,20} – не больше двадцати букв |
|
| |
или | В ситуации, когда выбор идет между несколькими односимвольными альтернативами, вместо | можно использовать [] |
паспорт (номер|№) – "паспорт номер", "паспорт №" |
|
. |
любой символ | (.*) – любой(ые) символ(ы) любое количество раз (в том числе и ноль) |
||
\ |
экранирование | Экранировать следует те символы, которые являются служебными при написании регулярных выражений: . \ ( ) [ ] + ? |
[кч]то? – "кто", "что", "кт", "чт"[кч]то\? – "кто?" и "что?", но не "что!"Внутри символьного класса экранировать требуется только дефиc |
|
\r\n\t |
возврат каретки, новая строка, табуляция |
Поскольку разные текстовые редакторы могут маркировать перенос строки различным образом, надежнее задавать перенос строки в регулярных выражениях так: [\r\n]{1,2} |
бутылка(\t)рома – "бутылкатабуляциярома", но не "бутылкапробелрома" |
В случае, когда в объекте защиты порог встречаемости для тестового объекта больше одного, следует помнить, что квантификаторы *
и +
являются "жадными", то есть они пытаются съесть максимально длинный кусок строки, на который они могут налезть. Например, мы создали регулярное выражение вида \((.*)\)
Оно предназначено для того, чтобы отлавливать информацию, данную в круглых скобках. Но в строке типа Петя (он был очень любопытен) решил посмотреть, что находится в заброшенном доме (хотя мама просила его туда не лазить). наше выражение увидит только одну группу в скобках, а именно: (он был очень любопытен) решил посмотреть, что находится в заброшенном доме (хотя мама просила его туда не лазить). То есть оно среагирует на самую первую открывающую скобку и на самую последнюю закрывающую. Если бы мы ввели ограничение на то, что в скобках могут быть только символы русского алфавита и пробелы, этого бы не произошло. Так, регулярное выражением вида \([А-я ]+\)
поймало бы обе группы в скобках.
(^|([\r\n]{1,2}))Весьма конфиденциально[\r\n]{1,2}Экз\. ?[N№]? ?[0-9]{1,4}[\r\n] {1,2}(веселый|ВЕСЕЛЫЙ) ['"].{0,10}['"][\r\n]{1,2}Степень веселья по шкале [0-9] {1,2}