Сейчас на сайте
Сейчас на сайте 0 пользователей и 0 гостей.

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

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

Total Commander поддерживает регулярные выражения в следующих функциях:

  1. Команды - Поиск файлов (в имени и содержимом файла).

  2. Во внутренней программе просмотра.

  3. В инструменте группового переименования.

  4. При выделении файлов по маске.

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

. \ ( ) [ ] { } ^ $ + * ? (кроме того, только в определении множеств символов: - ).

Обычные символы.Любой обычный символ означает сам себя, то есть в искомой строке должен находиться в точности этот символ и ничто иное. То же самое относится к нескольким обычным символам, идущим подряд.

Пример:

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

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 вхождений;

  • {,m} Не менее n и не более m вхождений.

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

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

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

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

В качестве первого варианта воспринимается всё от предыдущего метасимвола "

(" или "[" или от начала выражения до первого метасимвола "|", в качестве последнего - всё от последней вертикальной черты "|" до конца выражения или до ближайшего метасимвола ")".

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

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

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

баоук|].

Подвыражения для поиска+замены. Текстовые фрагменты в круглых скобках считаются подвыражениями. Подвыражения нумеруются слева направо, в порядке появления открывающих скобок.

Пример:

Чтобы поменять местами заголовок и пояснение в имени mp3-файла, когда они разделены чёрточкой (Заголовок - Пояснение.mp3), можно поступить следующим образом:

  1. Найти: (.*) - (.*)\.mp3.

  2. Заменить на: $2 - $1.mp3.

  3. Здесь $1 означает текст в первых скобках, а $2 - текст во вторых скобках.

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

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

Примеры:

(.)\1+ Находит, например, 'aaaa' и 'cc'.

(.+)\1+ Находит, например, 'abab' (где в первый раз 'ab' находится посредством .+ и во второй - посредством \1+ ) и '123123'.

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

  1. (?i) Отключает проверку верхнего/нижнего регистра. В Total Commander это значение включено по умолчанию для имён файлов.

  2. (?-i) Включает проверку регистра.

  3. (?g) Переключение на "жадный" режим (активно по умолчанию).

  4. (?-g) Выключение "жадного" режима, после чего "+" будет означать то же, что и "+?".

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

Total Commander использует свободную Delphi-библиотеку TRegExpr Андрея В. Сорокина: http://regexpstudio.com/

Часть приведённых выше объяснений и примеров позаимствована из справочного файла к этой библиотеке.