Регулярные выражения
Регулярные выражения — очень мощный инструмент для поиска текстовых строк и проверки соответствия их шаблону. Они позволяют искать слова по сложным критериям. Регулярные выражения предназначены главным образом для профессионалов, однако могут быть полезны и при работе в офисе для поиска определённых документов (см. примеры ниже).
Total Commander поддерживает регулярные выражения в следующих функциях:
Регулярные выражения состоят из обычных символов и специальных символов, так называемых метасимволов. Следующие символы — это метасимволы или их начальные части:
. \ ( ) [ ] { } ^ $ + * ? (кроме того, только в определении множеств символов: - ).
Обычные символы
Любой обычный символ означает сам себя, то есть в искомой строке должен находиться в точности этот символ и ничто иное. То же самое относится к нескольким обычным символам, идущим подряд.
Пример:
тестнаходит строку "тест" в исследуемом тексте. Обратите внимание: "тест" при этом обнаруживается В ЛЮБОМ МЕСТЕ имени файла или текстовой строки.
Escape-последовательности
Escape-последовательность начинается с обратной косой черты \.
Варианты Escape-последовательностей:
\tСимвол табуляции.
\xnnСимвол с шестнадцатеричным ASCII-кодом nn. Пример: \x20 — символ пробела. Таблица символов Windows (если она установлена, её запускаемый файл — charmap.exe) показывает символьные коды большинства специальных символов. Вы можете использовать калькулятор Windows в инженерном режиме для преобразования десятичных значений в шестнадцатеричные.
\[Левая квадратная скобка. Поскольку квадратные скобки — метасимволы, они должны быть записаны как \[ для поиска их в целевой строке.
\\Найти обратную косую черту.
\.Найти точку (символ "." является метасимволом и служит для поиска произвольного символа, см. ниже).
Примеры:
В\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".
Если фигурные скобки встречаются в "неправильном" месте, где они не могут быть восприняты как итератор, то они воспринимаются как обычные символы.
Варианты
Варианты (альтернативы) помещаются в круглые скобки и разделяются вертикальной чертой.
В качестве первого варианта воспринимается всё от предыдущего метасимвола '(' или от начала выражения до первого метасимвола '|', в качестве последнего — всё от последней вертикальной черты '|' до конца выражения или до ближайшего метасимвола ')'.
Варианты пробуются, начиная с первого. Попытки завершаются, как только удастся подобрать такой вариант, при котором совпадёт вся последующая часть выражения. Это означает, что варианты не обязательно обеспечат "жадное" поведение.
Пример: по вариантам (Иоанн|Иаков|Пётр) обнаруживается одно из имён: Иоанн, Иаков или Пётр.
Следует знать, что внутри множеств символов метасимвол '|' воспринимается как обычный символ. Например, [бак|бок|бук] означает ровно то же самое что и [баоук|].
Подвыражения для поиска+замены
Текстовые фрагменты в круглых скобках считаются подвыражениями. Подвыражения нумеруются слева направо, в порядке появления открывающих скобок.
Пример:
Чтобы поменять местами заголовок и пояснение в имени MP3-файла, когда они разделены чёрточкой (Заголовок - Пояснение.mp3), можно поступить следующим образом:
Найти: (.*) - (.*)\.mp3
Заменить на: $2 - $1.mp3
Здесь $1 означает текст в первых скобках, а $2 — текст во вторых скобках.
Обратные ссылки
\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 Андрея В. Сорокина: http://www.regexpstudio.com/
Часть приведённых выше объяснений и примеров позаимствована из справочного файла к этой библиотеке.