Простейшим регулярным выражением является строка символов, обрамленная знаками "/". Например:
/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/)