Шрифт:
Метасимвол '*', размещенный после квадратных скобок, указывает на то, что символы в скобках могут повторяться неопределенное число раз. Например, следующий шаблон соответствует любому слову:
[A-Za~z]*
Метасимвол '^' после открывающей квадратной скобки — это признак того, что шаблон соответствует любым символам, кроме указанных в скобках. Так, шаблон
[^a-zA-Z]
соответствует всем символам, кроме букв, а шаблон отвечает всем символам, которые не являются числами.
7.7. Поиск символов, встречающихся заданное число раз
Метасимвол '*' позволяет находить символы, встречающиеся несколько раз подряд, но число повторений при этом не определяется. Если же необходимо в процессе поиска учитывать точное количество последовательных вхождений символа в строку, следует применить шаблон \{ \}. Существует четыре варианта этого шаблона:
шаблон\{n\}
Соответствует шаблону, встречающемуся ровно n раз подряд
шаблон\(n,\}
Соответствует шаблону, встречающемуся не менее n раз подряд
шаблон\{,m\}
Соответствует шаблону, встречающемуся не более m раз подряд
шаблон\{n, m\}
Соответствует шаблону, встречающемуся не менее n и не более m раз подряд, где n и m — целые числа из интервала от 0 до 255
Представленный ниже шаблон соответствует последовательности из двух букв 'А', за которыми следует буква 'В':
А\{2\}В
В результате получим "ААВ".
В следующем шаблоне задано, что буква 'А' встречается не менее четырех раз подряд:
А\{4,\)В
Возможные результаты поиска — "ААААВ" или "АААААААВ", но не "АААВ". Поиск последовательности, в которой буква 'А' встречается от двух до четырех раз, выполняется по такому шаблону:
А\{2,4\}В
Будут найдены строки "ААВ", "АААВ", "ААААВ", но не "АВ" или "АААААВ". Вернемся к уже рассматривавшемуся примеру фильтрации текстового файла, фрагмент которого представлен ниже:
1234ХС9088 4523XX90D1 0011ХА9912 9931ХС3445
Допустим, требуется найти строки, в которых первые четыре символа — цифры, за ними идут символы "XX", а затем — еще четыре цифры. Решить данную задачу позволит такой шаблон:
[0-9]\{4\}ХХ[0-9]\(4\}
Применив этот шаблон к приведенному выше фрагменту, получим:
1234ХС9088 - не соответствует
4523XX900i - соответствует
0Q11XA9912 - не соответствует
9931ХС3445 - не соответствует
7.8. Примеры
В табл. 7.2 приведен ряд дополнительных примеров использования регулярных выражений.
Таблица 7.2. Полезные регулярные выражения
^the
Соответствует строкам, которые начинаются символами "the"
[Ss]igna[lL]
Соответствует словам "signal", "signaL", "Signal" и "SignaL"
[Ss]igna[lL]\.
То же, что и в предыдущем случае, но слово, к тому же, должно завершаться точкой
tty$
Соответствует строкам, которые завершаются символами "tty"
^USER$
Соответствует слову "USER", которое является единственным в строке
\.
Соответствует точке
^d..x..x..x
Соответствует каталогам с установленным правом на выполнение для владельца, группы и других пользователей
^[^l]
Исключает из списка файлов записи, соответствующие символическим ссыпкам
00*
Находит строки, содержащие два или больше нулей подряд
[lL]
Соответствует прописной и строчной букве 'l'
[iInN]
Соответствует прописным и строчным буквам 'i' и 'n'
^S
Соответствует пустой строке
^.*$
Соответствует строке, состоящей из любого числа символов
^……$
Соответствует строке, состоящей из шести символов
[a-zA-Z]