Регулярные выражения интерпретатора awk

Простейшим регулярным выражением является строка символов, обрамленная знаками "/". Например:

/Asia/

Эта означает все записи, которые содержат подстроку Asia (например, запись, содержащая Asia как часть длинной строки, подобной Asian или Pan-Asiatic).

Чтобы ограничить поиск следует использовать операторы ~(входит) и!~(не входит).

~/Asia/

ищет подстроку Asia, в то время как программа:

!~/Asia/

ищет подстроку в которой не содержится Asia.

В регулярном выражении могут использоваться метасимволы:

Символ Описание
^ указывает на начало строки (~ /^awk/ означает «начинается на awk»)
$ указывает на конец строки (~ /awk$/ означает «заканчивается на awk»)
. указывает на любой символ, кроме начала новой строки (~ /.wk/ может соответствовать «awk» но не «wk»)
[] соответствует любому из указаных в квадратных скобках символу. Если первый символ внутри скобок ^ то берутся символы НЕ указанные в квадратных скобках. Вместо перечисления символов может быть указан диапазон (например «a-c»).
* Любая подстрока или её отсутствие
? Любой символ или его отсутствие
| разделяет альтернативы
() групирует символы (~ /(awk|Shell)/ означает либо «awk», либо «Shell»)
+ означает что предыдущий символ или группа может повториться несколько раз (~ /(awk)+/ означает либо «awk», либо «awkawk», либо «awkawkawk» и т. д.)
\ отменяет специальное значение символа, превращая его из метасимвола в обычный (~ /\^awk/ означает именно подстроку «^awk»)

Например:

/^.$/

просматривает записи для поиска записи, состоящей из одного символа.

/[a-zA-Z]/

поиск любой английской буквы

/^[0-9]+$/

Состоит только из цифр

В дополнение к распознаваемым метасимволам, awk распознает следующие последовательности языка программирования Си внутри регулярных выражений и строк:

\b – возврат

\f – перевод формата

\n – новая строка

\r – возврат каретки

\t – табуляция

\ddd – восьмиричное значение

\" – кавычки

c – любой метасимвол

\c – с

Например, выражение

/\t/

Означает поиск табуляции

Предположим, что нужно найти строку символов, подобную ^[0-9]+$. Если строка "^[0-9]+$" используется как регулярное выражение, появляются дополнительные знаки "\", которые защищают регулярное выражение. Это связано с тем, что первый уровень знаков "\" удаляется при синтаксическом анализе строки. Первый уровень "\" перед символом возвращает его специальное значение в регулярном выражении, второй нужен, чтобы защитить его в строке.

Например, нужно найти строки, содержащие "b" и следующий за ним знак "$". Регулярное выражение для этого шаблона:

b\$

Чтобы создать строку для представления этого регулярного выражения, необходимо добавить еще один символ "\":

"b\\$"

Следующие регулярные выражения попарно эквивалентны:

x ~ "b\\$" x ~ /b\$/
x ~ "b\$" x ~ /b$/
x ~ "b$" x ~ /b$/
x ~ \\t x ~ /\t/

Регулярные выражения Perl (целиком совместимы с выражениями в .htaccess)

Символ Описание
. Соответствует любому символу (за исключением символа новой строки)
(...) Группирует последовательность элементов
+ Удовлетворяет предыдущему образцу один или большее количество раз
? Удовлетворяет образцу нуль или один раз
* Соответствует образцу один или нуль раз
[...] Соответствует символу из заданного множества
[^...] Соответствует символу из множества, полученного отрицанием
(...|...|...) Соответствует одной из альтернатив
^ Соответствует началу строки
$ Соответствует образцу в конце строки
{n, m} Соответствует образцу от n до m раз
{n} Соответствует образцу точно n раз
{n,} Соответствует образцу минимум n раз
\n\t etc. Соответствует знаку новой линии, символу табуляции и т. д.
\b Соответствует на границе слова
Соответствует НЕ границе слова
\d Соответствует цифре
\D Соответствует не цифре
\s Соответствует пробелу
\S Соответствует не пробелу
\w Соответствует букве или цифре
\W Соответствует символу, не являющемуся ни буквой, ни цифрой

Perl помещает регулярные выражения (образцы, шаблоны) в слэши, т. е. в наклонные черточки, например, в виде /pattern/. Следующие регулярные выражения истинны если:

/ig/ Строка содержит 'ig'
/(b|d|f)ig/ Строка содержит ‘big’, ‘dig’ or ‘fig’
/[0-9]+/ Строка содержит номер

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

if ($str =~ /pattern/)

В данном случае регулярные выражения принимают значение «истинно», если образец найден в строке ($str). Если строка по содержит образца, то выражение возвращает значение «ложно». Например, следующее выражение проверяет, содержит ли строка текст Web Programming:

if ($str =~ /Web Programming/)

Для того, чтобы проверить полное совпадение, выражение должно привязать сравнение к началу и концу строки. Например, следующее выражение имеет значением величину «истинно», если и только если переменная $str принимает одно из трех значений: «banana», «bananana») «banananana»:

($str =~ /^ba(na) {2,4}$/)

Аналогичным образом, следующее выражение истинно тогда и только тогда, когда переменная $str содержит слово «the» и не является частью другого слова, такого как «their».

($str =~ /\bthe\b/)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: