? (означает, что предыдущий шаблон встречается не более одного раза) и
+ (означает, что предыдущий шаблон встречается один или более раз)
\{n\}
Указывает на то, что предыдущий шаблон встречается ровно n раз
\{n,\}
Указывает на то, что предыдущий шаблон встречается не менее п раз
\{,m\}
Указывает на то, что предыдущий шаблон встречается не более т раз
\{n, m\}
Указывает на то, что предыдущий шаблон встречается не менее n раз и не более т раз
7.1. Поиск одиночных символов с помощью метасимвола '.'
Метасимвол '.' соответствует любому одиночному символу. Если, например, требуется найти слово, начинающееся с подстроки "beg", после которой стоит произвольный символ, а за ним -cимвол 'n', задайте шаблон beg.n. Будут найдены такие слова, как "begin", "began" и т. д.
Данный метасимвол удобно применять при фильтрации результатов работы команды ls -l для поиска файлов, имеющих требуемые права доступа. Следующий шаблон соответствует файлам, выполнять которые могут все пользователи:
…x..x..x
Вот примеры отбора строк режима по этому шаблону:
drwxrwxrw- — не соответствует
-rw‑rw‑rw- — не соответствует
-rwxrwxr‑x -cоответствует
-rwxr‑xr‑x -cоответствует
Предположим, выполняется фильтрация текстового файла. Необходимо найти в нем строки, состоящие из десяти символов, из которых пятый и шестой — "ХС". Данная задача решается с помощью такого шаблона:
….ХС….
Он означает, что первые четыре символа могут быть произвольными, следующие два — "ХС", а последние четыре — тоже произвольные. Вот несколько примеров сравнения:
1234ХС9088 -cоответствует
4523ХХ9001 — не соответствует
0011ХА9912 — не соответствует
9931ХС3445 -cоответствует
7.2. Поиск выражений в начале строки с помощью метасимвола '^'
Метасимвол '^' позволяет искать слова или символы, стоящие в начале строки. Например, благодаря шаблону ^d можно отобрать из списка, выводимого командой ls -l, только те записи, которые соответствуют каталогам:
drwxrwxrw- - соответствует
-rw‑rw‑rw- - не соответствует
drwxrwxr‑x -cоответствует.
-rwxr‑xr‑x — не соответствует
Вернемся к рассмотренному в предыдущем параграфе примеру фильтрации текстового файла. Шаблон ^001 соответствует строкам, начинающимся с символов "001". Результат его применения может быть таким:
1234ХС9088 — не соответствует
4523ХХ9001 — не соответствует
0011ХА9912 -cоответствует
993IXC3445 — не соответствует
Для поиска строк, у которых в четвертой позиции от начала стоит символ '1', можно воспользоваться следующим шаблоном:
^…1
В результате получим:
1234ХС9088 — не соответствует
4b23ХХ9001 — не соответствует
0011XA9912 -cоответствует
993ДХС3445 -cоответствует
Чтобы найти строки, начинающиеся с символов "comp", следует указать:
^comp
Давайте немного усложним этот шаблон. Предположим, после символов "comp" могут идти любые две буквы, но завершать последовательность должны символы "ing":
^comp..ing
Этот шаблон обеспечивает поиск таких слов, как "computing", "complaining" и т. д. Как показывает данный пример, в регулярном выражении можно сочетать различные шаблоны поиска.
7.3. Поиск выражений в конце строки с помощью метасимвола '$'
Метасимвол "$' предназначен для поиска слов или символов, находящихся в конце строки. Он указывается в конце шаблона. Предположим, требуется найти строки, заканчивающиеся словом "trouble". Эту задачу позволяет решить такой шаблон:
trouble$
Следующий шаблон соответствует пустой строке, не содержащей символов:
А с помощью показанного ниже шаблона можно найти строки, включающие только один символ:
7.4. Поиск символов, встречающихся неопределенное число раз, с помощью метасимвола '*'
Метасимвол '*' означает, что предыдущий символ в регулярном выражении либо отсутствует, либо встречается произвольное число раз подряд (1, 2 и т. д.). Например, шаблон
сотрu*t
отвечает таким словам:
computer
computing
compuuuuute
А шаблон
10133*
соответствует следующему:
101333
10133
10134
7.5. Поиск специальных символов с помощью метасимвола '\'
Ряд символов, попадая в состав регулярных выражений, приобретает специальное значение. В общем случае специальными являются следующие символы:
$ . ' " * [ ] ^ | ( ) \ + ? { }
Когда требуется найти строку, содержащую один из таких символов, его необходимо "защитить" в шаблоне с помощью обратной косой черты, которая отменяет специальное значение следующего за ней метасимвола. Предположим, строка содержит символ '.', который, как известно, в регулярном выражении соответствует произвольному символу. Вот шаблон для него:
\.
Если необходимо найти файлы, допустим, с расширением pas, можно применить следующий шаблон:
\*\.pas
7.6. Поиск символов, входящих в заданный набор или
диапазон
Шаблон [] соответствует списку или диапазону символов, указанных в квадратных скобках.
Символы в списке можно разделять запятыми. Это облегчает восприятие шаблона, хотя и не является обязательным требованием.
Для задания диапазона символов используется дефис (-). Слева от него указывается первый символ диапазона, а справа — последний. Предположим, необходимо найти символ, являющийся цифрой. Можно применить такой шаблон:
[0123456789]
Однако проще задать диапазон:
[0-9]
Следующий шаблон соответствует любой строчной букве:
[a‑z]
Чтобы найти любую букву произвольного регистра, воспользуйтесь шаблоном
[A‑Za‑z]
Здесь формируется список из двух диапазонов: прописные буквы от 'А' до 'Z' и строчные буквы от 'а' до 'z'.
Представленный ниже шаблон соответствует любому алфавитно–цифровому символу:
[A‑Za‑z0-9]
Далее показан шаблон, предназначенный для поиска трехсимвольных комбинаций следующего типа: в начале находится буква 's', за ней может следовать любая прописная или строчная буква, а завершает последовательность буква 't':
s[a‑zA‑Z]t
Если же комбинация состоит только из букв нижнего регистра, воспользуйтесь таким шаблоном:
s[a‑z]t
Чтобы найти слово "computer" независимо от того, расположено оно в начале предложения или нет, примените такой шаблон:
[Сс]omputer
Следующий шаблон соответствует слову "system", которое начинается с прописной или строчной буквы и за которым следует точка:
[S,s]ystem\.
Запятая в квадратных скобках поставлена для того, чтобы сделать шаблон удобным для зрительного восприятия.
Метасимвол '*', размещенный после квадратных скобок, указывает на то, что символы в скобках могут повторяться неопределенное число раз. Например, следующий шаблон соответствует любому слову:
[A‑Za~z]*
Метасимвол '^' после открывающей квадратной скобки — это признак того, что шаблон соответствует любым символам, кроме указанных в скобках. Так, шаблон
[^a‑zA‑Z]
соответствует всем символам, кроме букв, а шаблон отвечает всем символам, которые не являются числами.
7.7. Поиск символов, встречающихся заданное число раз