Пример:
$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.