Глава 3. Регулярные выражения
53
следует.любая.прописная.буква.или.цифра..У.нас.при.выполнении.данной.команды.
отображаются.следующие.строки:
User:
XT
johnson
an
XW
ing model 7
an
X7
wing model
В.каждой.из.этих.строк.есть.прописная.буква.
X
,.за.которой.сразу.следует.либо.
другая.прописная.буква,.либо.цифра.
Обратные ссылки
Обратные ссылки
.на.регулярные.выражения.являются.одной.из.самых.мощных.
и.часто.сбивающей.с.толку.операцией.регулярных.выражений.
Рассмотрим
1
.следующий.файл.
tags.txt
:
1 Command
2 line
3 is
4 great
5 !
Предположим,.вы.хотите.написать.регулярное.выражение,.которое.будет.извлекать.
любую.строку,.содержащую.соответствующую.пару.полных.тегов.HTML..От-
крывающий.тег.включает.имя.тега.HTML;.закрывающий.тег.имеет.то.же.имя,.но.
с.символом.слеша..Рассмотрим.теги.
.и.
..Вы.можете.найти.их,.написав.
длинное.регулярное.выражение,.содержащее.все.возможные.значения.тегов.HTML,.
или.же.сосредоточиться.на.формате.тега.HTML.и.использовать.обратную.ссылку.
на.регулярное.выражение,.как.показано.ниже:
$ egrep '<([A-Za-z]*)>.*\1>' tags.txt
2 line
4 great
5 !
В.этом.примере.обратная.ссылка.
\1
.расположена.в.последней.части.регулярного.
выражения..Эта.ссылка.направляет.нас.к.выражению,.заключенному.в.первый.на-
бор.скобок,.
[A-Za-z]*
..Данное.выражение.состоит.из.двух.частей..Диапазон.букв.
1.
Для.эксперимента.создайте.этот.файл.и.сохраните.его.в.папке,.в.которой.ранее.был.со-
хранен.файл.frost.txt,.то.есть.в.папке.C:/home.(для.Windows).или.в.каталоге./home.(для.
Linux).
54
Часть I • Основы
в.скобках.обозначает,.что.может.быть.выбрана.любая.буква,.прописная.или.строч-
ная..Знак.
*
,.который.следует.за.буквенным.выражением.в.квадратных.скобках,.
означает.повторение.действия.ноль.и.некоторое.количество.раз..Следовательно,.
\1
.ссылается.на.соответствующий.шаблон,.который.задан.в.скобках..Если.
[A-Za-z]*
.
соответствует.
div
,.то.
\1
.также.ссылается.на.шаблон.
div
.
Таким.образом,.общее.регулярное.выражение.можно.описать.так..Сначала.должен.
быть.указан.знак.«меньше».(
<
)..Это.первый.символ.в.регулярном.выражении..
За.ним.следует.некоторое.количество.букв.(от.нуля.и.более)..Далее.находится.
символ.«больше».(
>
)..После.символа.
>
.может.располагаться.некоторое.количество.
символов.(от.нуля.и.более)..Точка.(
.
).означает.любой.символ,.кроме.конца.строки,.
а.звездочка.(
*
).—.ноль.или.большее.количество.совпадений.с.предыдущим.элемен-
том,.сопровождаемым.еще.одним.символом.
<
.и.слешем.(
/
)..Далее.располагается.
последовательность,.соответствующая.выражению.в.круглых.скобках,.которая.
завершается.символом.
>
..Если.данная.последовательность.соответствует.любой.
части.строки.нашего.текстового.файла,.
egrep
.выведет.эту.строку.
Вы.можете.использовать.несколько.обратных.ссылок.в.выражении.и.обращаться.
к.каждой.как.
\1
,.или.
\2
,.или.
\3
,.в.зависимости.от.ее.порядка.в.регулярном.вы-
ражении..Символ.
\1
.относится.к.первому.набору.скобок,.
\2
.—.ко.второму.и.т..д..
Обратите.внимание,.что.круглые.скобки.являются.метасимволами;.у.них.есть.
особое.значение..Если.вы.просто.хотите.найти.соответствие.круглой.скобке,.вам.
нужно.исключить.ее.специальное.значение,.поставив.перед.ней.обратный.слеш..
Например,.напишите.
sin\([0-9.]*\)
,.чтобы.найти.такие.выражения,.как.
sin(6.2)
.
или.
sin(3.14159)
.
Валидный HTML-код не обязательно должен быть расположен в одной строке;
закрывающий тег может находиться в нескольких строках от открывающего. Кро-
ме того, встречаются одиночные теги, например
для разрыва строки или
для пустого абзаца. Для того чтобы включить такие условия в наш поиск,
придется использовать более сложный подход.
Квантификаторы
Квантификаторы
.указывают,.сколько.раз.элемент.должен.появиться.в.строке,.
и.определяются.фигурными.скобками.
{}
..Например,.шаблон.
T{5}
.означает,.что.
буква.
T
.должна.последовательно.появляться.ровно.пять.раз..Шаблон.
T{3,6}
.
означает,.что.буква.
T
.должна.появляться.последовательно.от.трех.до.шести.раз..
Шаблон.
T{5,}
.означает,.что.буква.
T
.должна.появляться.пять.раз.или.более.
Do'stlaringiz bilan baham: |