Регулярные выражения - это простой путь найти нужную подстроку в строке. Регулярные выражения - это строки, являющиеся сочетанием обычных символов и символов, имеющих специальное значение, указывающих на то, что может изменяться в целевой строке. Регулярные выражения в AutoIt по умолчанию учитывают регистр.

Регулярные выражения составляются из одного или более простых спецификаторов. Если символа нет в следующей таблице, значит он соответствует только самому себе.

Символы повтора (*, +, ?, {...} ) будут соответствовать строке наибольшей длины, если сразу же за ними не идёт символ вопросительный знак '?' (в этом случае часть шаблона будет соответствовать строке наименьшей длины).

Вложенные группы разрешены, однако, следует помнить, что все внешние группы (за исключением незахватывающих) будут возвращены в массиве после внутренних групп.


Осторожно: неправильно написанное регулярное выражение может стать причиной зацикливания и даже вызвать сбой работы скрипта.


Метасимволы вне квадратных скобок

( ) начало и конец группы, например (text). Означают последовательность. Используются для применения квантификаторов не к одному символу, а к нескольким, а также для дальнейшего использования найденной последовательности.
[ ] начало и конец описания символьного класса, например [a-z]. Символьный класс возвращает один символ из множества. Изменить это могут повторители.
{ } начало и конец повторителей, например {3,8}
\ экранирующий символ, принять метасимвол как обычный символ, например (\\, \., \[, \], \{, \}, \*).
^ начало строки (или начало текста в многострочных текстах), например ^text text$
$ конец строки (или конец текста в многострочных текстах), например ^text text$
. любой символ, кроме перевода строки (по умолчанию)
| символ "или", обычно внутри группы, например (10|20)
? предыдущий символ либо имеется, либо не имеется, аналогично и для групп. После символа повтора - жадность паттерна - (.*?)
* повтор предыдущего символа или группы 0 и более раз
+ повтор предыдущего символа или группы 1 и более раз

Метасимволы внутри квадратных скобок

Часть шаблона, заключенная в квадратные скобки, называется символьным классом. Внутри скобок метасимволы теряют свое специальное значение, кроме метасимволов принадлежащих этому классу. Экранировать требуется только 4 символа \ - ] [. Если символ "-" находится в конце перечисления, то не требует экранирования. В шаблоне могут использоваться метасимволы групп, но не используются метасимволы границ, например \A, \B, \Z, \z, а метасимвол \b означает символ возврата 'backspace'.

\ экранирующий символ
^ символ исключения, но в случае, когда стоит первым, например [^3]
- символ охвата, например [a-z], то есть все символы от a до z
[ ] начало и конец описания символьного класса, например [a-z]

Метасимволы подстановки

\1 - \9 ссылка на найденную группу в самом шаблоне и в шаблоне замены
$1 - $9 ссылка на найденную группу в шаблоне замены
$0 или \0 весь шаблон поиска или все группы
\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 reset start of match.
\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
\G обозначает точку, в которой закончился предыдущий поиск (first matching position in subject)

Метасимволы для задания групп символов

\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 раз
\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) в многострочном тексте символы ^ и $ означают начало и конец строки соответственно, иначе начало и конец текста
(?-m) отменяет ранее включенный (?m)
(?s) символ "точка" (.) дополнительно включает в себя перенос строки в многострочных текстах, иначе только любой символ
(?-s) отменяет ранее включенный (?s)
(?x) режим без учёта пробелов между частями регулярного выражения и позволяет использовать # для комментариев. Пробелы позволяют сделать образец лучше читаемым. Пример комментариев - (?#text). Текст после символа # и до закрывающей скобки ) игнорируется интерпретатором и используется для добавления комментария непосредственно в регулярное выражение.
(?-x) отменяет ранее включенный (?x)
(?J) allow duplicate names (разрешает дубликаты/двойные названия).
(?U) инвертировать жадность квантификаторов
(?-U) отменяет ранее включенный (?U)

Флаги групп

Допустимо комбинировать, например (?imsx:Text)
(?i:...) группа не учитывает регистр символов, например (?i:Text)
(?-i:...) группа учитывает регистр символов, например (?-i:Text)
(?:...) исключить группу из найденных, например (?:Text)
(?>...) группа не входящая в поиск, но имеет свойство ревнивого квантификатора, например (?>Text)(Text)
(?=...) группа не входящая в поиск, но проверяющая совпадение образца справа, например (Text)(?=Text)
(?!...) группа не входящая в поиск, но проверяющая не совпадение образца справа, например (Text)(?!Text)
(?<=...) группа не входящая в поиск, но проверяющая совпадение образца слева, например (?<=Text)(Text)
(?<!...) группа не входящая в поиск, но проверяющая не совпадение образца слева, например (?<!Text)(Text)

Повтор образца, применяется к символам и группам (квантификаторы)

{n} повторить предыдущий символ n раз
{n,} повторить предыдущий символ n и более раз ( {n,}? - предпочтительно наименьший захват)
{,n} повторить предыдущий символ от 0 до n раз
{n, m} повторить предыдущий символ от n до m раз ( {n,m}? - предпочтительно наименьший захват)
* повторить предыдущий символ 0 и более раз. То же что и {0,}
+ повторить предыдущий символ 1 и более раз. То же что и {1,}
? предыдущий символ либо имеется, либо не имеется. То же что и {0, 1}. Второе значение символа ? после символа повтора .*? - жадность, см. ниже
*? повторить предыдущий символ 0 и более раз. Ограничится первым найденным образцом, иначе включить всё до последнего найденного образца.
+? повторить предыдущий символ 1 и более раз. Ограничится первым найденным образцом, иначе включить всё до последнего найденного образца.
*+ захватывающие ноль или больше последовательных совпадений
?? предпочтительно наименьший захват, например [a-z]??

Ревнивая или сверхжадная квантификация

Захват без возврата к предыдущим шагам поиска.

*+ захватывается большее совпадение, например (.*+)! захватывает знак ! не оставляя
++ захватывается большее совпадение, например (.++)! захватывает знак ! не оставляя.
{n,}+ захватывается большее совпадение, например (.{2,}+)! захватывает знак ! не оставляя.

Символьные классы POSIX

Пример [[:upper:]]{2} - поиск повтора заглавных букв. Инвертировать диапазон так: [[:^digit:]]

[: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]

Условные подмаски

(?(condition)yes-pattern) например (?(?=[a-z])\d), расшифровка (?(условие)шаблон_при_успехе)
(?(condition)yes-pattern|no-pattern) например (?(?<=\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

Примеры конструкций

.* повтор любого символа, а значит весь текст
[ ... ] одиночный символ множества, например [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,}?[ ])(.*?) заменить на '$0'&@CRLF - выполняет перенос строки на границе первого попавшегося пробела после каждых 35 символов.
Найти (?si)(?:.*?)?(https?:\/\/[\w.:]+\/?(?:[\w\/?&=.~;\-+!*_#%])*) - найти ссылки
Найти [A-Za-z0-9._-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}) - найти почтовые ящики