Пример:
$var =~ /w+/Здесь =~ привязывает переменной $var оператор /w+/, который выполняет поиск первого слова в этой переменной.
Найденный результат заносится в переменную типа $цифра, надо сказать что в эту переменную заносятся выражения попадающие под шаблон в круглых скобках. К примеру, можно написать такую программу:
$var = "Hello world!!!!"; $var =~ /Hello (\w+)/; printf "Результат: $1\n";После запуска программы, она выдаст:
Результат: worldЗдесь происходит поиск слова стоящего после слова Hello. Найденное слово заносится в переменную $1. Надо сказать, что оператор привязки может и не использоваться, тогда операторы будут брать данные из переменной $_.
Пример:
$_ = "Hello world!!!!"; /Hello (\w+)/; printf "Результат: $1\n";Этот пример будет аналогичен вышеизложенному и результат будет точно такой же.
Синтаксис:
m/шаблон/параметргде место слово "параметр" ставятся параметры поиска:
| Параметр | Описание |
|---|---|
| g | Глобальный поиск. |
| i | Сравнение не зависит от регистра (верхний или нижний) |
| m | Строка многострочная |
| o | Однопроходная компиляция |
| s | Однострочная строка |
| x | Используются расширенные регулярные выражения. |
Хотя вы могли заметить из предыдущих примеров, что параметр можно не использовать, также можно не использовать m, а просто заключить шаблон между обратными бэкслэшами (деление). Как уже было сказано выше, результат поиска заносится в переменную типа $цифра.
Пример:
$var = "Hello world!!!!"; $var =~ /(\w+)(\w+)/; printf "Результат: $1 $2\n";Результат:
Результат: Hello worldВ случае удачного завершения операции возвращается true, а если ничего найти не удалось тогда false. К примеру:
if ( $var =~ /+w/ )
{ print "Найдено!!!\n"; }
else
{ print "Найдено!!!\n"; }
Шаблон не был бы шаблоном, если бы не метасимволы - символы обозначающие группы других символов. Имеются следующие метасимволы.
| \ | Отменяет действие следующего за ним метасимвола и считает его как обычный символ |
|---|---|
| () | Группировка. |
| . | Один произвольный символ. Кроме '\n' - конец строки. |
| $ | Конец строки |
| | | Альтернатива |
| ^ | Начало строки |
| [] | Множество символов. |
/Hello (\w+)/;Здесь в круглых скобках используется метасимвол /w, он характеризует один алфавитно-цифровой символ. Знак '+' - модификатор, он характеризует число повторений метасимвола.
Имеются следующие модификаторы:
| * | Повторяется 0 или большее число раз |
|---|---|
| + | -//- 1 или большее число раз |
| ? | 1 или 0 раз |
| {n} | точно n раз |
| {n,m} | не меньше n, но и не больше m |
Для полного понятия рассмотрим еще несколько дополнительных метасимволов:
| \w | Алфавитно-цифровой или '_' символ |
|---|---|
| \W | не -//- |
| \s | один пробел |
| \S | один не пробел |
| \D | одна не цифра |
| \d | одна цифра |
| \b | Граница слова |
| \B | не граница слова |
| \A | начало строки |
| \Z | конец начало строки |
| \G | конец действия m//g |
s/шаблон/подстановка/параметрОператор замены подобен оператору поиска, различие состоят в том, что у него используется еще один аргумент 'подстановка' - это выражение подставляется вместо найденного по шаблону выражения, так же существуют различия в параметрах:
| Параметр | Описание |
|---|---|
| g | Глобальный поиск. |
| i | Сравнение не зависит от регистра (верхний или нижний) |
| m | Строка многострочная |
| o | Однопроходная компиляция |
| s | Однострочная строка |
| x | Используются расширенные регулярные выражения. |
| e | Рассматривать правую часть как выражение |
$var =~ s/привет/hello/;здесь происходит замена слова 'привет' словом 'hello'. Также допускается использование метасимволов:
var =~ s/привет \w+/hello/;в данном случае произойдет замена слова 'привет' и следующего за ним слова на слово 'hello'.
В случае удачного успешного завершения операции возвращается количество замен, а если ничего найти не удалось тогда false или 0.
tr/таблица1/ таблица2/параметрыВ отличии от вышеизложенного оператора замены, этот оператор заменяет все символы выражения указанные в 'таблице1' на символы в 'таблице2'.
Имеет следующие параметры:
| c | Дополнение 'таблица1', то есть заменяются те символы, которые не стоят в 'таблица1', немного похожа на операцию NOT |
|---|---|
| d | Cтереть найденные, но не замененные символы |
| s | "сжать" повторяющиеся замененные символы, то есть если после замены в подряд идут несколько одинаковых символов, то они сжимаются в один. |
$ var = "Hello All"; $ var =~ tr/l/L/; print "$var\n";Получим:
HeLLo ALL.