( ) - начало и конец группы, например (text). Означают последовательность. Используются для применения квантификаторов не к одному символу, а к нескольким, а также для дальнейшего использования найденной последовательности. [ ] - начало и конец описания символьного класса, например [a-z]. Символьный класс возвращает один символ из множества. Изменить это могут повторители. { } - начало и конец повторителей, например {3,8} \ - экранирующий символ, принять метасимвол как обычный символ, например (\\, \., \[, \], \{, \}, \*). ^ - начало строки (или начало текста в многострочных текстах с флагом (?m)), например ^text text$ $ - конец строки (или конец текста в многострочных текстах с флагом (?m)), например ^text text$ . - любой символ, кроме переноса строки @LF (по умолчанию). С флагом (?s) - любой символ | - символ "или", обычно внутри группы, например (10|20) ? - предыдущий символ либо имеется, либо не имеется, аналогично и для групп. После символа повтора - жадность патерна - (.*?) * - повтор предыдущего символа или группы 0 и более раз + - повтор предыдущего символа или группы 1 и более раз
Метасимволы внутри квадратных скобок
Часть шаблона, заключенная в квадратные скобки, называется символьным классом. Внутри скобок метасимволы теряют свое специальное значение, кроме метасимволов принадлежащих этому классу. Экранировать требуется только 4 символа \ - ] [. Если символ "-" находится в конце перечисления, то не требует экранирования. В шаблоне могут использоваться метасимволы диапазонов, но не используются метасимволы границ, например \A, \B, \Z, \z, а метасимвол \b означает символ возврата 'backspace'. Учтите, что диапазоны, например [а-я] используют UTF-8 последовательность, а не ASCII.
\ - экранирующий символ ^ - символ исключения, но в случае, когда стоит первым, например [^3] все кроме три - - символ охвата, например [a-z], то есть все символы от a до z [ ] - начало и конец описания символьного класса, например [a-z]
Метасимволы подстановки
\1 - \9 - ссылка на найденную группу в самом шаблоне и в шаблоне замены. Отсчёт групп слева по открывающей скобке "(" $1 - $9 - ссылка на найденную группу в шаблоне замены $0 или \0 - весь шаблон поиска или все группы (9 не ограничение) \a - Chr(7) - символ с десятичным ASCII-кодом 7 (звонок). При выводе воспроизводит звуковой сигнал. BEL (hex 07) \cn - управляющий символ, который генерируется при нажатии комбинации клавиш Ctrl+n, где n- символ, например \cD соответствует Ctrl+D. \cA = \001, \cZ = \032, \cM = \r = \015 \e - Chr(27) - символ escape (hex 1B) \f - Chr(12) перенос страницы (hex 0C) \h - [ \t] - любой горизонтальный пробел, табуляция - Chr(9), Chr(32), Chr(160) \H - [^\h] - любой символ, который не пробел или табуляция \K - слева от \K предшествующее совпадение, т.е. текст1\Kтекст2, найти текст2, перед которым текст1. \n - @LF, Chr(10) - символ переноса на новую строку (hex 0A) \N - [^\n] Любой символ, который не символ переноса на новую строку (не @LF). Не работает в 3.3.6.1 \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) любой из символов переноса строки \t - @TAB, Chr(9) символ табуляции - tab (hex 09) \v - [\r\n\f] Chr(10), Chr(11), Chr(12), Chr(13) вертикальная табуляция (@CR и @LF и перенос страницы) \V - [^\v] - любой символ, который не Chr(10), Chr(11), Chr(12), Chr(13) вертикальная табуляция (перенос строки) \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 - [\f\n\r\t\v ] - пустой символ: Chr(9), Chr(10), Chr(12), Chr(13), Chr(32) (перенос страницы, табуляция, возврат каретки, перевод строки и пробел). \S - [^\f\n\r\t\v ] - любой непробельный символ \w - [0-9a-zA-Z_] - любой алфавитно-числовой символ или подчеркивание (только символы латинского алфавита) \W - [^0-9a-zA-Z_] - любой символ неслова
Границы символов
\A - начало текста, не зависит от флага "(?m)" и поэтому может встретится только 1 раз. \G - похожий на \A, но несколько раз, если найденные следуют друг за другом от начала. \z - абсолютный конец текста, не зависит от флага "(?m)" и поэтому может встретится только 1 раз \Z - конец текста, т. е. граница между любым символом и концом текста или до символа \n, если он в конце строки, не зависит от флага "(?m)" и поэтому может встретится только 1 раз. \b - начало или конец слова, т. е. граница между символами, один из которых удовлетворяет \W, а другой - удовлетворяет \w (только в англ. текстах) \B - середина слова, т. е. граница между символами, оба которых удовлетворяют \W или оба которых удовлетворяют \w
Флаги модификаторы
Ставятся в начало регулярного выражения или группы.
Состояние модификаторов выключено по умолчанию, соответственно для использования требуется включить.
Пример использования : (?i)(Text) или ((?-i)Text), допустимо комбинировать (?is)(Text) или ((?imsx)Text)
(?i) - не учитывать регистр символов. Это работает только для символов латинского алфавита. (?-i) - отменяет ранее включенный (?i) (?m) - в многострочном тексте символы ^ и $ означают начало и конец строки соответственно, например ^(Text)\r$, иначе начало и конец текста. Символ LF - разделитель строк (?-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)
Эти 4 группы имеют фиксированную длину, в них нельзя использовать *, +, {n, m} (?=...) - группа не входящая в поиск, но проверяющая совпадение образца справа, например (Text)(?=Text) (?!...) - группа не входящая в поиск, но проверяющая не совпадение образца справа, например (Text)(?!Text) (?<=...) - группа не входящая в поиск, но проверяющая совпадение образца слева, например (?<=Text)(Text), см. также \K (?<!...) - группа не входящая в поиск, но проверяющая не совпадение образца слева, например (?<!Text)(Text)
(?<name>...) - именованная ссылка. Вызов именованной ссылки \k<name> это тоже что вызов \1 или $1 (?#...) - группа содержащая комментарий, например (?# это комментарий ). Полностью игнорируется интерпретатором
Повтор предыдущего элемента, применяется к символам и группам (квантификаторы)
{n} - повторить предыдущий символ n раз {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:] - буквы и цифры [0-9A-Za-z] (как \w, но без "_") [:alpha:] - буквы [A-Za-z] (без "_") [:ascii:] - символы от Chr(0) до Chr(127) [:blank:] - пробел и символ табуляции Chr(9) и Chr(32), тоже что [\t ] [:cntrl:] - управляющие символы от Chr(0) до Chr(31) и Chr(127) [:digit:] - десятичные цифры, тоже что \d, [0-9] [:graph:] - тоже что символы, отображаемые при печати [:print:], но кроме пробела (от Chr(33) до Chr(126) ) [:lower:] - прописные буквы [a-z] [: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] [:word:] - символы слов, тоже что \w [:xdigit:] - шестнадцатеричные цифры [0-9A-Fa-f]
Условные подмаски
(?(если)то) - например (?(?=[a-z])\d), (?(условие)шаблон_при_успехе) (?(если)то|иначе) - например (?(?<=\d)a|b) или (?:(?>(?=[^a-z]*[a-z])())?(?:(?=\1)aa|(?!\1)1)), (?(условие)шаблон_при_успехе|шаблон_при_не_успехе) (?=[\w]+)| (?R) - рекурсивный вызов
Эти флаги не действуют в AutoIt3
\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 - удаление пустых строк (?<![А-яЁё])([А-яЁё]+) \1, заменить на \1 - удаление повторов слов [A-ZА-ЯЁ]{2,}?[a-zа-яё]+ - выявит файлы, в которых есть ошибки вида "НАйти"- не преднамеренный повтор заглавной буквы (.{35,}?[ ])(.*?), заменить на '$0' & @CRLF - где @CRLF символ переноса строки. Поставить флаг "Вычислить". Выполнить перенос строки на границе первого попавшегося пробела после каждых 35 символов. (?si)(?:.*?)?(https?:\/\/[\w.:]+\/?(?:[\w\/?&=.~;\-+!*_#%])*) - найти ссылки [A-Za-z0-9._-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}) - найти почтовые ящики