Заказать звонок
Логин
Пароль

Регулярные выражения в Total Commander (или поиск по шаблонам)

24.08.2019

Сегодня я столкнулся с тем, что оказывается в интернете не так-то уж и много информации про регулярные выражения для Total Commander`а. Если говорить точнее, то она возможно и есть, но найти ее крайне тяжело. Да, и к тому же ни все тонкости там сказаны и "разжеваны". А для нас, людей живущих очень быстро, дорога каждая минута. И разбираться, что нам поможет, а что нет, очень долго... В общем я решил собрать сюда всю инфу, которую я нашел по регуляркам для Тотал Коммандера. Для начала я покажу Вам то, что пишут в мануалах (официальная справка) от самих разработчиков, но с русским переводом! =)

Справка по использованию регулярных выражений в Total Commander (manual)

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

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

Total Commander поддерживает регулярные выражения в следующих функциях:
- Команды (Commands) → Поиск файлов (Search). Поиск позволяет найти файл по имени файла и/или содержимому файла
- В Lister
- В инструменте группового переименования
- В диалоге выбора

 

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

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

Если Вы напишите для поиска только обычные символы, например: "тест", то поиск найдет Вам файл с этими символами, идущими в строгом порядке, как "т→е→с→т". Примечание: Этот запрос находит "тест" в любом месте в имени файла и/или строки в тексте.

Пробег последовательности

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

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

Символы в квадратных скобках позволяют построить символьный класс. Total Commander найдет один из символов этого класса. Тире позволяет определить группы, например, [a-z].
^ - В начале находит все символы за исключением перечисленных исключением.

Примеры:
[aeiou] - Поиск в точности одного из перечисленных символов.
[^aeiou] - Поиск всех, кроме перечисленных символов.
M[ae][iy]er Находит "Meier" всеми возможными способами письма: Mayer, Meyer, Maier, Meier. Это Очень полезно, если вы не можете вспомнить точное написание имени.

Мета-символы

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

Итераторы

Итераторы используются для повторения символа или выражения в левой части итератора.
* - Ноль или более раз где-то
+ - Один или несколько раз где-то
{n} ровно n раз где-то
{n,} минимум n раз где-то
{n,m} минимум n и m максимально раз где-то

Все эти операторы являются "жадными", это означает, что они принимают столько символов, сколько они могут получить. Ввод вопросительного знака ? после оператора делает их "не жадными", т.е. он занимает ровно столько символов, сколько необходимо.
Пример: если применить "b+" к целевой строке "abbbbc", то поиск найдет "bbbb", а если применить "b+?", то поиск находит только "b".

Альтернативы

Альтернативы заключаются в круглых скобках, и разделены вертикальной чертой. Пример: (John|James|Peter) находит одно из имен John, James или Peter.

Подвыражения для поиска + функция "заменить"

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

Обратные

\n - Находит подвыражению n другой раз в результате поиска.
Пример: (.+)\1+ находит, например, abab (где первый ab находится с помощью: .+ и второй за счет: \1+)

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

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

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

Другие модификаторы не имеют отношения к Total Commander, потому что программа поддерживает поиск по регулярным выражениям ТОЛЬКО В ОДНОЙ СТРОКЕ.

Total Commander использует свободные Delphi библиотеки "TRegExpr" от Андрея В. Сорокина
Некоторые из приведенных выше объяснений взяты из файла справки для этой библиотеки.

Немного слов от себя

Если Вы захотите сделать поиск по файлам (по названию файла) в определенных файлах (в моем случае мне нужны были php и js файлы), то вот выражение, которое мне помогло:

*.php;*.js
Т.е. выходит так, что ни какие скобки мне там не помогли... Надо просто каждое выражение отделять точкой с запятой и тогда все получится. В общем для IT`шников все интуитивно! =)