Дополнение №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}) | найти почтовые ящики |