Регулярные выражения

Регулярные выражения — очень мощный инструмент для поиска текстовых строк и проверки соответствия их шаблону. Они позволяют искать слова по сложным критериям. Регулярные выражения предназначены главным образом для профессионалов, однако могут быть полезны и при работе в офисе для поиска определённых документов (см. примеры ниже).

Total Commander поддерживает регулярные выражения в следующих функциях:
Команды – Поиск файлов (в имени и содержимом файла).
Во внутренней программе просмотра.
В инструменте группового переименования.
При выделении файлов по маске.

Регулярные выражения состоят из обычных символов и специальных символов, так называемых метасимволов. Следующие символы — это метасимволы или их начальные части:
.  \  (  )  [  ]  {  }  ^  $  +  *  ?    (кроме того, только в определении множеств символов: - ).

Обычные символы

Любой обычный символ означает сам себя, то есть в искомой строке должен находиться в точности этот символ и ничто иное. То же самое относится к нескольким обычным символам, идущим подряд.
Пример:
тестнаходит строку "тест" в исследуемом тексте. Обратите внимание: "тест" при этом обнаруживается В ЛЮБОМ МЕСТЕ имени файла или текстовой строки.

Escape-последовательности

Escape-последовательность начинается с обратной косой черты \.
Варианты Escape-последовательностей:
\tСимвол табуляции.
\xnnСимвол с шестнадцатеричным ASCII-кодом nn. Пример: \x20 — символ пробела. Таблица символов Windows (если она установлена, её запускаемый файл — charmap.exe) показывает символьные коды большинства специальных символов. Вы можете использовать калькулятор Windows в инженерном режиме для преобразования десятичных значений в шестнадцатеричные.
\x{nnnn}Юникодный символ с указанным шестнадцатеричным кодом nnnn. Имейте в виду, что Total Commander использует Юникод, так что вам нужно использовать эту нотацию для поиска символов, не входящих в вашу текущую кодовую страницу.
\[Левая квадратная скобка. Поскольку квадратные скобки — метасимволы, они должны быть записаны как \[ для поиска их в целевой строке.
\\Найти обратную косую черту.
\.Найти точку (символ "." является метасимволом и служит для поиска произвольного символа, см. ниже).
Примеры:
В\x20началенаходит "В начале" (обратите внимание на пробел).
\tВначаленаходит "Вначале" с предшествующей табуляцией.

Множества символов

Символы в квадратных скобках задают множества символов. Будет найден ровно один символ из перечисленных. Чёрточка позволяет определять группы, например, [a-z] — это все 26 строчных латинских букв. При указании ^ в качестве первого символа множества идёт поиск всех символов, кроме перечисленных.
Если необходимо включить во множество саму чёрточку, поместите её в начало или конец списка или предварите символом обратной косой черты: '\-'. Если необходимо добавить во множество сам символ ']', поместите его в самое начало или, точно так же, поставьте перед ним обратную косую черту: '\]'.
Примеры:
[аеиоу]Находит ровно одну из перечисленных гласных.
[^аеиоу]Находит любой символ, кроме этих гласных.
M[ae][iy]erНаходит фамилию "Meier" во всех возможных способах написания: Mayer, Meyer, Maier, Meier. Очень полезно, если вы не можете вспомнить точное написание имени.

Метасимволы

Вот список наиболее важных метасимволов:
^Начало строки.
$Конец строки.
.Любой символ.
\wАлфавитно-цифровой символ из стандартной латиницы или знак подчёркивания '_'.
\WДополнение к \w, т. е. любой символ, кроме алфавитно-цифровых и подчёркивания.
\dЦифра.
\DДополнение к \d (не цифра).
\sРазделитель между словами (пробел, табуляция и пр.).
\SДополнение к \s (любой символ, кроме разделителей).
\bУказывает границу слова.
\BУказывает, что данная позиция не является границей слова.

Метасимвол границы слова (\b) означает, что в том месте, где он находится, обязательно должно быть либо начало, либо конец слова. Метасимвол \B, напротив, означает, что в указанном месте границы слова быть не должно.
Пример:
Выражение abc\b найдёт подстроку "abc" в строке "xabc def" и не найдёт ничего в строке "xabcdef". Выражение abc\B, наоборот, ничего не найдёт в "xabc def" и обнаружит подстроку "abc" в строке "xabcdef".

Итераторы

Итераторы (метасимволы повторов) используются для повторения символа или выражения, находящегося слева от итератора.
*Ноль или более вхождений, то же что и {0,}.
?Ноль или одно вхождение, то же что и {0,1}.
+Одно вхождение или более, то же что и {1,}.
{n}Ровно n вхождений.
{n,}Не менее n вхождений.
{n,m}Не менее n и не более m вхождений.

Все эти операторы "жадные". Это означает, что они захватывают максимально возможное число символов. Размещение вопросительного знака ? после оператора делает его "не жадным", то есть захватывающим символы не более необходимого минимума.

Пример: b+, как и b*, применённые ко входной строке "abbbbc" найдут "bbbb", в то время как b+? найдёт только "b", а b*? — вообще пустую строку; b{2,3} найдёт "bbb", в то время как b{2,3}? найдёт "bb".

Если фигурные скобки встречаются в "неправильном" месте, где они не могут быть восприняты как итератор, то они воспринимаются как обычные символы.

Варианты

Варианты (альтернативы) помещаются в круглые скобки и разделяются вертикальной чертой.
В качестве первого варианта воспринимается всё от предыдущего метасимвола '(' или от начала выражения до первого метасимвола '|', в качестве последнего — всё от последней вертикальной черты '|' до конца выражения или до ближайшего метасимвола ')'.
Варианты пробуются, начиная с первого. Попытки завершаются, как только удастся подобрать такой вариант, при котором совпадёт вся последующая часть выражения. Это означает, что варианты не обязательно обеспечат "жадное" поведение.

Пример: по вариантам (Иоанн|Иаков|Пётр) обнаруживается одно из имён: Иоанн, Иаков или Пётр.

Следует знать, что внутри множеств символов метасимвол '|' воспринимается как обычный символ. Например, [бак|бок|бук] означает ровно то же самое что и [баоук|].

Подвыражения для поиска+замены

Текстовые фрагменты в круглых скобках считаются подвыражениями. Подвыражения нумеруются слева направо, в порядке появления открывающих скобок. TC поддерживает до 32 подвыражений.
Пример:
Чтобы поменять местами заголовок и пояснение в имени MP3-файла, когда они разделены чёрточкой (Заголовок - Пояснение.mp3), можно поступить следующим образом:
Найти: (.*) - (.*)\.mp3
Заменить на: $2 - $1.mp3
Здесь $1 означает текст в первых скобках, а $2 — текст во вторых скобках.

В строке замены можно использовать выражения \U, \L, \F, \n для перевода текста в верхний регистр, нижний регистр, первой буквы в верхний регистр и возврата к исходному регистру, соответственно. Пример:
Найти: (.*) - (.*)\.mp3
Заменить на: \U$2 - \L$1.mp3
Текст из вторых скобок (идущий первым) будет преобразован в верхний регистр, а из первых (идущий вторым) — в нижний.

Обратные ссылки

\nУказывает на повторное вхождение подвыражения номер n. Здесь n — число от 1 до 9.

Примеры:
(.)\1+Находит, например, "aaaa" и "cc".
(.+)\1+Находит, например, "abab" (где в первый раз "ab" находится посредством .+ и во второй — посредством \1+ ) и "123123".

Модификаторы

Модификаторы используются для изменения поведения регулярных выражений.

(?i)Отключает проверку верхнего/нижнего регистра. В Total Commander это значение включено по умолчанию для имён файлов.
(?-i)Включает проверку регистра.
(?g)Переключение на "жадный" режим (активно по умолчанию).
(?-g)Выключение "жадного" режима, после чего + будет означать то же, что и +?.

Прочие модификаторы неприменимы для Total Commander, поскольку программа поддерживает только поиск в пределах одной строки.

Total Commander использует свободную Delphi-библиотеку TRegExpr Андрея В. Сорокина: https://regex.sorokin.engineer/
Часть приведённых выше объяснений и примеров позаимствована из справочного файла к этой библиотеке.