Регулярные выражения

При использовании глобального поиска функция pos() возвращает текущую позицию, с которой будет начинаться сопоставление:
$str = "<BR><TDXOL>";
$pattern = qr/<(\w+)>/; while ($str =~ m/$pattern/ig) {
print H$1 — позиция ", pos($str), "<BR>";
}
Вывод:
BR - позиция 4 TD — позиция 8 OL — позиция 12
В этом коде мы использовали специальную переменную $1, которая содержит фрагмент (соответствующий шаблону), заключенный в регулярном вы¬ражении в круглые скобки. После знака $ указывается число, соответствую¬щее порядковому номеру круглых скобок в строке (значение во вторых круг¬лых скобках будет сохранено в переменной $2, в третьих— в $з и т. д.). Для примера произведем проверку правильности ввода E-mail и выведем отдель¬но название почтового ящика и название домена:
$emails = "unicross@mail.ru";
$pattern = qr/A([a-z0-9_\.\-]+ )\@(([a-z0-9\-]+\.) + [a-z]{2,4})$/; if ($emails =~ m/$pattern/i) {
print "E-mail соответствует шаблону"; print "<BR>HIUHK: ", $1, " домен: ", $2;
}
else {
print "He соответствует шаблону";
}
Вывод:
E-mail соответствует шаблону ящик: unicross домен: mail.ru
Обратите внимание: мы заключили строку с E-mail в апострофы, т. к. символ @ является специальным. Если заключить в кавычки, то все, что расположено после символа @, будет считаться названием массива и соответственно будет заменено его значением.
Оператор s/// выполняет поиск и замену в исходной строке с помощью регу¬лярного выражения. Имеет следующий формат:
5/<Регулярное выражение>/<Строка для замены>/ [<Модификатор>]
В параметре <модификатор> могут быть указаны следующие флаги:
• i — поиск без учета регистра;
• m— поиск в строке, состоящей из нескольких строк, разделенных симво¬лом новой строки;
• s — однострочный режим. В этом режиме символ точка сопоставляется с символом новой строки;
• х— разрешает использовать в регулярном выражении пробелы и коммен¬тарии;
• g — поиск и замена всех соответствий шаблону;
О е — указывает, что в параметре сстрока для замены> указано выражение языка Perl, которое необходимо предварительно вычислить.
Так же, как и в операции поиска, все фрагменты, заключенные в круглые скобки, попадают в специальные переменные $п, где п— порядковый номер скобок в шаблоне. Для примера возьмем два тега и поменяем имена тегов местами:
$str = "<BRXTD>";
$str =~ s/<(\w+)><(\w+)>/<$2><$l>/i; print $str;
Вывод в исходном HTML-коде:
<TDXBR>
Такой же результат можно получить, если вместо знака $ указать символ \:
$str = "<BRXTD>";
$str =~ s/< (\w+) X (\w+) >/<\2x\l>/i; print $str;
Для примера, заменим все палиндромы из пяти букв в строке на слово "па¬линдром":
$str = "потоп комок слово";
$str =~ s/([а-я])([а-я])[а-я]\2\1/палиндром/i; print $str; # Выведет палиндром комок слово
Как видно из примера, был заменен только один палиндром. Для того чтобы были заменены все палиндромы, необходимо указать флаг глобального по¬иска д:
$str = "потоп комок слово";
$str =~ s/Ца-я]) ([а-я]) [а-я] \2\1/палиндром/1д; print $str; # Выведет палиндром палиндром слово
Функция split о также поддерживает регулярнее выражения. Она разделяет строку на подстроки по указанному разделителю и добавляет их в массив:
$str = "unicross@mail.ru";
@Mass = split("[\@\.]", $str) ; for($i=0; $i<@Mass; $i++) { print "$Mass[$i] <BR>";
}
Вывод:
unicross
mail
ru


Страница: 1 | 2 | 3 | 4 | 5


Web сайты на Perl и MySql