|
Дополнение №2 | |
Регулярные выражения.
\\, \., \[, \], \{, \}, \*, ....\040, \0113, \377, \x{50}, \x50, ....\d, \D, \w, \W, ....\A, \z, \Z, \b, ....| ( ) | начало и конец группы, например (text). Скобки означают последовательность, используются для применения квантификаторов не к одному символу, а к нескольким, а также для дальнейшего использования найденной последовательности. |
| [ ] | начало и конец описания символьного класса, например: [a-z], [abcЭЮЯ]. Символьный класс возвращает один символ из множества. Изменить это могут повторители. |
| { } |
начало и конец повторителей, например: a{8,} - повтор предыдущего символа "a" от 8 символов и более. [abc]{8,} - повтор предыдущих символов от 8 символов и более. (xyz){3,8} - повтор предыдущей группы от 3-х до 8-ми символов. |
| \ | экранирующий символ, позволяет применять метасимвол как обычный символ, например (\\, \., \[, \], \{, \}, \*) |
| ^ | начало строки (или начало текста в многострочных текстах), например ^text text$ |
| $ | конец строки (или конец текста в многострочных текстах), например ^text text$ |
| . | любой символ, кроме переноса строки @LF (по умолчанию). При использовании флага (?s) - любой символ |
| | | символ "или", обычно внутри группы, например: (10|20) - или "10" или "20" (abcd|cdfe) - или "abcd" или "cdfe" |
| ? | предыдущий символ либо имеется, либо не имеется, аналогично и для групп. После символа повтора - жадность шаблона - (.*?) |
| * | повтор предыдущего символа или группы 0 и более раз |
| + | повтор предыдущего символа или группы 1 и более раз |
| \ | экранирующий символ, позволяет применять метасимвол как обычный символ, например (\\, \., \[, \], \{, \}, \*) |
| ^ | символ исключения символьного класса, в том случае, когда стоит первым, например: [^3] (все символы, кроме цифры три) [^abc] (все символы, кроме символов "a", "b", "c") |
| - | символ охвата (означает символьный интервал), например: [a-z] (то есть любой из символов от "a" до "z") [a-dx-z] (то есть любой из символов от "a" до "d" и от "x" до "z") |
| [ ] | начало и конец описания символьного класса, например: [ahkpuЯЮЦ] (?i)[a-zА-ЯёЁ] |
| \1 - \9 | ссылка на найденную группу в самом шаблоне и в шаблоне замены. отсчёт групп слева по открывающей скобке "(" |
| $1 - $9 | ссылка на найденную группу в шаблоне замены (9 не ограничение) |
| ${1} - ${9} | ссылка на найденную группу в шаблоне замены (9 не ограничение) например: ${1}12\$345${2} (позволяет предотвращать пересечение цифровых данных) |
| $0 или \0 | весь шаблон поиска или все группы (9 не ограничение) |
| \a | символ с десятичным ASCII-кодом 7 Chr(7) (звонок). При выводе воспроизводит звуковой сигнал. BEL (hex 07) |
| \cn | управляющий символ, который генерируется при нажатии комбинации клавиш Ctrl+n, где n- символ например: \cD соответствует Ctrl+D. \cA = \001, \cZ = \032, \cM = \r = \015 |
| \e | символ escape Chr(27), (hex 1B) |
| \f | перенос страницы Chr(12), (hex 0C) |
| \h |
любой горизонтальный пробел, табуляция [ \t] - Chr(9), Chr(32), Chr(160) - эквивалентно "[\x09 \xA0]"
При включённом UCP включаются дополнительные unicode разделители "[\x09 \xA0\x{1680}\x{180E}\x{2000}-\x{200A}\x{202F}\x{205F}\x{3000}]" |
| \H | любой символ, который не пробел или табуляция [^\h] |
| \K | слева от \K предшествующее совпадение, т.е. текст1\Kтекст2, найти текст2, перед которым текст1 |
| \n | символ переноса на новую строку @LF, Chr(10), (hex 0A) |
| \N | любой символ, который не символ переноса на новую строку [^\n] (не @LF), независимо от опции (?s) |
| \Q ... \E | любые метасимволы между \Q и \E воспринимаются как текст. Не исключайте ошибки: \QD:\Edit\1.txt\E |
| \r | символ возврат каретки @CR, Chr(13) (hex 0D) |
| \R | любой из символов переноса строки. [\n\f\r\v] Chr(10), Chr(11), Chr(12), Chr(13), соответствует "(?>\r\n|\n|\r)" |
| \t | символ табуляции @TAB, Chr(9), tab (hex 09) |
| \v |
вертикальная табуляция (@CR и @LF и перенос страницы) [\r\n\f] Chr(10), Chr(11), Chr(12), Chr(13) - эквивалентно "[\x0A-\x0D]"
При включённом UCP включаются дополнительные unicode разделители "[\x0A-\x0D\x{0085}\x{2028}\x{2029}]" |
| \V | любой символ, который не Chr(10), Chr(11), Chr(12), Chr(13) вертикальная табуляция (перенос строки) [^\v] |
| \x** | где * - любая шестнадцатеричная цифра например: \x41 соответствует латинской букве 'A', \x50\x65\x72\x6C - слово Perl |
| \x{**..} | где * - любая шестнадцатеричным цифра например: \x{50}\x{65}\x{72}\x{6C} - слово Perl попробуйте от \x{01} до \x{7F}, что в десятеричной системе означает символы от 1 до 127 или в UTF кодировке \x{044F} равный символу "я" |
| \*** | где * - любая восьмеричная цифра например, последовательность \120\145\162\154 представляет слово Perl (\120 - восьмеричный код буквы Р, \145 - буквы е, \162 - буквы r, \154 - буквы l) пробел - \040 попробуйте от \001 до \177, что в десятеричной системе означает символы от 1 до 127 |
| \d | любая десятичная цифра [0-9] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| \D | любая не цифра [^0-9] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| \s |
пустой символ: Chr(9), Chr(10), Chr(12), Chr(13), Chr(32) (перенос страницы, табуляция, возврат каретки, перевод строки и пробел) [\f\n\r\t\v ] - эквивалентно "[\h\x0A\x0C\x0D]"
При включённом UCP "[x0C\x0D]" | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| \S | любой непробельный символ [^\f\n\r\t\v ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| \w |
любой алфавитно-числовой символ или подчеркивание (только символы латинского алфавита) [0-9a-zA-Z_] При включённом UCP любой алфавитно-числовой символ Unicode или подчеркивание (включая русские символы и символы других языков) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| \W |
любой символ неслова [^0-9a-zA-Z_] При включённом UCP любой не алфавитно-числовой символ Unicode и подчеркивание (исключая русские символы и символы других языков) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
\p{Name} \p{^Name} \P{Name} \P{^Name} |
Только пи включённом UCP \p{Name} - получает символ со свойством Name, где Name - имя свойства. \P{Name} - исключает символ со свойством Name, где Name - имя свойства. Пример записи:
Те свойства, которые не совсем понятны пока отмечены * Некоторые свойства групп можно посмотреть в "Таблице символов" (charmap.exe) в группировке "Диапазоны Юникода"
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| \A | начало текста, не зависит от флага "(?m)" и поэтому может встретится только 1 раз |
| \G | обозначает точку, в которой закончился предыдущий поиск (first matching position in subject) похожий на \A, но несколько раз, если найденные следуют друг за другом от начала |
| \z | абсолютный конец текста, не зависит от флага "(?m)" и поэтому может встретится только 1 раз |
| \Z | конец текста, т. е. граница между любым символом и концом текста или до символа \n, если он в конце строки, не зависит от флага "(?m)" и поэтому может встретится только 1 раз. |
| \b | начало или конец слова, т. е. граница между символами, один из которых удовлетворяет \W, а другой - удовлетворяет \w (только границы слов латинского алфавита)
При включённом UCP границы \b работают для слов Unicode, т.к. \w и \W захватывают символы Unicode. |
| \B | середина слова, т. е. граница между символами, оба которых удовлетворяют \W или оба которых удовлетворяют \w
При включённом UCP серединой слова являются и слова с Unicode символами. |
| (?i) | не учитывать регистр символов. |
| (?-i) | отменяет ранее включенный (?i) |
| (?m) | многострочный поиск. во многострочном тексте символы ^ и $ означают начало и конец строки соответственно, иначе начало и конец текста |
| (?-m) | отменяет ранее включенный (?m) |
| (?s) | точке соответствует любой символ. символ "точка" (.) дополнительно включает в себя перенос строки @LF (режим "одна строка") |
| (?-s) | отменяет ранее включенный (?s) |
| (?x) | игнорирует пробелы и табуляции в регулярном выражении, кроме тех что в квадратных скобках. пробелы позволяют сделать регулярное выражение легко читаемым. позволяет в конце регулярного выражения добавить комментарий после символа # и до конца строки |
| (?-x) | отменяет ранее включенный (?x) |
| (?J) | allow duplicate names (разрешает дубликаты/двойные названия). подшаблоны могут иметь одинаковые имена |
| (?U) | инвертировать жадность квантификаторов. кванторы становятся ленивыми (не жадными) |
| (?-U) | отменяет ранее включенный (?U) |
| (?i:...) | группа не учитывает регистр символов, например (?i:Text) это работает только для символов латинского алфавита. |
| (?-i:...) | группа учитывает регистр символов, например: (?-i:Text) |
| (?:...) | исключает группу из найденных, например: (?:Text) |
| (?>...) | группа не входящая в поиск, но имеет свойство сверхжадного квантификатора, например: (?>Text)(Text) |
| (?=...) | группа не входящая в поиск, но проверяющая совпадение образца справа, например: (Text)(?=Text) |
| (?!...) | группа не входящая в поиск, но проверяющая не совпадение образца справа, например: (Text)(?!Text) |
| Следующие 2 группы имеют фиксированную длину, в них нельзя использовать *, +, {n, m} | |
| (?<=...) | группа не входящая в поиск, но проверяющая совпадение образца слева, например: (?<=Text)(Text), см. также \K |
| (?<!...) | группа не входящая в поиск, но проверяющая не совпадение образца слева, например: (?<!Text)(Text) |
| Дополнительные группы | |
| (?<name>...) | именованная ссылка. вызов именованной ссылки \k<name> это тоже что вызов \1 или $1 |
| (?#...) | группа содержащая комментарий например: (?# это комментарий ) (полностью игнорируется интерпретатором) |
| (?|...) | группа без захвата со сбросом |
| {n} | повторить предыдущий символ n раз. может иметь ограничения, к примеру, (?s)\A(.{65536}) или (?s)\A((?:..){10921}) |
| {n,} | повторить предыдущий символ n и более раз ( {n,}? - предпочтительно наименьший захват) |
| {n, m} | повторить предыдущий символ от n до m раз ( {n,m}? - предпочтительно наименьший захват) |
| * | повторить предыдущий символ 0 и более раз. То же что и {0,} жадный захват, наибольший, который позволит совпасть оставшейся части шаблона. |
| + | повторить предыдущий символ 1 и более раз. То же что и {1,} жадный захват, наибольший, который позволит совпасть оставшейся части шаблона. |
| ? | предыдущий символ либо имеется, либо не имеется. То же что и {0,1} второе значение символа ? после символа повтора .*? - жадность, см. ниже |
| *? | повторить предыдущий символ 0 и более раз ограничится наименьшим захватом (не жадный), который позволит совпасть оставшейся части шаблона. |
| +? | повторить предыдущий символ 1 и более раз ограничится наименьшим захватом (не жадный), который позволит совпасть оставшейся части шаблона. |
| ?? | предпочтительно наименьший захват, например: ([a-z]??)g для 'gg' возвращает две пустые строки |
| *+ | повторить предыдущий символ 0 и более раз. |
| ++ | повторить предыдущий символ 1 и более раз. |
| {n,}+ | повторить предыдущий символ n и более раз. |
| [:alnum:] |
буквы и цифры,как \w, но без "_" - эквивалентно [^\W_] или [0-9A-Za-z]
При включённом UCP буквы и цифры Unicode (такие же, как [^\W_] или \p{Xan}) |
| [:alpha:] | Буквы ASCII (такие же, как [^\W\d_] или [A-Za-z] без "_")
При включённом UCP буквы Unicode (такие же, как [^\W\d_] или \p{L}) |
| [:ascii:] | символы от Chr(0) до Chr(127) |
| [:blank:] | пробел и символ табуляции Chr(9) и Chr(32), тоже что [\t ]
При включённом UCP горизонтальные пробелы Unicode (то же, что и \h) |
| [:cntrl:] | управляющие символы от Chr(0) до Chr(31) и Chr(127) |
| [:digit:] | десятичные цифры, тоже что \d, [0-9]
При включённом UCP десятичные цифры Unicode (такие же, как \d или \p{Nd}) |
| [:graph:] | тоже что символы, отображаемые при печати [:print:], но кроме пробела (от Chr(33) до Chr(126) ) |
| [:lower:] | прописные буквы [a-z]
При включённом UCP Unicode строчные буквы (такие же, как \p{Ll}) |
| [:print:] | символы, отображаемые при печати, включая пробел (от Chr(32) до Chr(126) ) |
| [:punct:] | символы, отображаемые при печати, кроме букв и цифр Chr=(33-47, 58-64, 91-96, 123-126), те, что не входят ни в [:alnum:], ни в [:cntrl:] |
| [:space:] | пробельные символы (как \s, но включая символ VT: Chr(11) ) от Chr(9) до Chr(13) и Chr(32). Тоже что [\f\n\r\t\v ] |
| [:upper:] | заглавные буквы [A-Z]
При включённом UCP Unicode прописные буквы (такие же, как \P{Lu}) |
| [:word:] | Символы ASCII "Word" (такие же, как \w или [[:alnum:]_]).
При включённом UCP символы Unicode "word" (такие же, как \w или [[:alnum:]_] или \p{Xwd}) |
| [:xdigit:] | шестнадцатеричные цифры [0-9A-Fa-f] |
| \n \1 ... \9 |
Ссылается на предыдущую группу захвата по ее абсолютному числу. Предупреждение: если номер группы n не существует, он вычисляется как символ со значением n при условии, что n является допустимым восьмеричным значением, иначе происходит ошибка. Из-за этой двусмысленности данная форма не рекомендуется. Отдавайте предпочтение следующим формам для безопасной семантики. |
| \gn | Ссылается на предыдущую группу захвата по ее абсолютному числу. |
| \g{n} | Ссылается на предыдущую группу захвата по ее абсолютному числу. Аналогично приведенному выше, но четко разграничивает, где заканчивается n: полезно, когда следующий символ(ы) является(являются) цифрами. |
| \g-n | Ссылается на предыдущую группу захвата по ее относительному номеру. |
| \k | Ссылается на предыдущую группу захвата по ее имени. |
Примеры обратных ссылок:
| (?R) или (?0) | Рекурсирует во все регулярное выражение. |
| (?n) | Вызывает подшаблон по абсолютному номеру. |
| (?+n) | Вызывает подшаблон по относительному номеру. |
| (?-n) | Вызывает подшаблон по относительному номеру. |
| (?&name) | Вызывает подшаблон по имени. |
| (?(condition)yes-pattern) | например: (?(условие)шаблон_при_успехе) (?(если)то) (?(?=[a-z])\d) |
| (?(condition)yes-pattern|no-pattern) | например: (?(условие)шаблон_при_успехе|шаблон_при_не_успехе) (?(если)то|иначе) (?(?<=\d)a|b) (?:(?>(?=[^a-z]*[a-z])())?(?:(?=\1)aa|(?!\1)1)) |
| (?=[\w]+)| (?R) | рекурсивный вызов |
| Инверсия. Получение значений, кроме заданного шаблона... | |
|
(?(?=pattern)|.+?) или (?(?=pattern)(*ACCEPT)|.+?) | например: [[:upper:]] - найдёт заглавные буквы. (?(?=[[:upper:]])|.+?) - найдёт всё, кроме заглавные букв. если не найдено, то возвращает пустое значение. |
| (?(?=pattern)(*FAIL)|.+?)
или (?(?=pattern)(*F)|.+?) | например: [[:upper:]] - найдёт заглавные буквы. (?(?=[[:upper:]])(*FAIL)|.+?) - найдёт всё, кроме заглавные букв. если не найдено, то (*FAIL) не возвращает пустое значение. |
| (*ACCEPT) | Принудительно обеспечивает немедленный успех сопоставления в текущей подпрограмме или шаблоне верхнего уровня. |
| (*FAIL) или (*F) | Приводит к немедленному сбою сопоставления. |
| (*MARK:name) или (*:name) | * |
| (*COMMIT) | * |
| (*PRUNE) | * |
| (*PRUNE:name) | * |
| (*SKIP) | * |
| (*SKIP:name) | * |
| (*THEN) | * |
| (*THEN:name) | * |
| (?J) | Позволяет дублировать имена групп или подгрупп. |
| (?X) | Приводит к тому, что некоторые последовательности вне контекста вызывают ошибку. |
| (*J) | Обеспечивает совместимость с javascript. |
| (*LIMIT_MATCH=n) | Ограничивает количество совпадений до n. |
| (*LIMIT_RECURSION=n) | Ограничивает количество рекурсии до n. |
| (*NO_START_OPT) | Отключает некоторые оптимизации. |
| (*LF) | Символ перевода строки - это символ перевода строки. Соответствующие переводы строк могут быть сопоставлены с \n |
| (*CR) | Перевод строки - это возврат каретки. Соответствующие переводы строк могут быть сопоставлены с \r |
| (*CRLF) | Возврат каретки, за которым следует перевод строки. Соответствующие переводы строк могут быть сопоставлены с \r\n |
| (*ANYCRLF) | Любое из вышеперечисленных выражений, встречающихся в данных, вызовет обработку новой строки. Соответствующие разрывы строк могут быть сопоставлены с (?:\r\n?|\n) или с \R |
| (*ANY) | Любое из вышеперечисленных плюс специальные переводы строк в Юникоде. |
| (*BSR_UNICODE) (*BSR_ANYCRLF) | Изменяется действие параметра \R |
| \p | любой символ пунктуации |
| \l | означает, что следующий символ регулярного выражения преобразуется в нижний регистр. |
| \u | означает, что следующий символ регулярного выражения преобразуется в верхний регистр. |
| \L...\Е | означает, что все символы в регулярном выражении между \L и \Е преобразуются в нижний регистр. |
| \U...\Е | означает, что все символы в регулярном выражении между \U и \Е преобразуются в верхний регистр. |
| \x | любой шестнадцатеричный символ |
| \< | начало слова, т. е. граница между символом, удовлетворяющим \W и символом, удовлетворяющим \w |
| \> | конец слова, т. е. граница между символом, удовлетворяющим \w и символом, удовлетворяющим \W |
| {,n} | повторить предыдущий символ от 0 до n раз |
| .* | повтор любого символа, а значит весь текст |
| [ ... ] | одиночный символ множества, например [aeiou] - любой из строчных гласных |
| [^ ... ] | ни один из символов множества, например [^aeiou] - ни один из строчных гласных |
| [0-9A-Fa-f]{6} | шестнадцатеричное число, например FF0000 |
| [А-яЁё] | диапазон для русских букв. Или так [А-Яа-яЁё] |
Примеры | ||
| Найти | Заменить | Описание |
| (\r\n|\r|\n){2,} | \1 | удаляет пустые строки |
| (?<![^\s\A])([А-яЁё]+)[\h]+\1 | \1 | удаляет повторы слов |
| [A-ZА-ЯЁ]{2,}?[a-zа-яё]+ | выявляет файлы, в которых есть ошибки вида "НАйти"- не преднамеренный повтор заглавной буквы | |
| (.{35,}?)\h | '$1'&@CRLF | выполняет перенос строки на границе первого попавшегося пробела после каждых 35 символов |
| (*UCP)(?si)(https?://[\w.:]+/?[\w/?&:,=.~;@–\-+!*_#%()]*) | найти ссылки, в которые могут входить русские символы и символы Unicode | |
| [A-Za-z0-9._-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}) | найти почтовые ящики | |




