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

ОБРАТИТЕ ВНИМАНИЕ
Метасимвол \w работает только с буквами латинского алфавита. С буквами русского языка он не употребляется.
Что же делать, если нужно найти точку, ведь символ точки соответствует лю¬бому символу, кроме символа перевода строки? Для этого перед специаль¬ным символом необходимо указать обратный слэш \. Продемонстрируем это на примере (листинг 2.25).
¦J? Г"".’ "Г"
$str = "29,04.2007"; # Неправильная дата (вместо точки указана запятая)
$pattern = qr/A[0-3]\d.[01]\d.[12][09]\d\d$/;
# Символ "\" не указан перед точкой
if ($str =~ /$pattern/) { print "Дата введена правильно"; } else { print "Дата введена неправильно"; }
# Выведет "Дата введена правильно", точка означает любой символ
$pattern = qr/A[0-3]\d\.[01]\d\.[12][09]\d\d$/;
# Символ "\" указан перед точкой
if ($str =~ /$pattern/) { print "Дата введена правильно"; } else { print "Дата введена неправильно"; }
# Выведет "Дата введена неправильно",
# перед точкой указан символ "\"
Количество вхождений символа в строку задается с помощью квантифика¬торов".
• {п} — соответствует п вхождениям символа в строку, например, \d{2} со¬ответствует двум вхождениям любой цифры;
• {n,} — по крайней мере, n вхождений символа в строку, например, \d{2,} соответствует двум и более вхождениям любой цифры;
• {n,m} — не менее п вхождений символа в строку и не более т. Цифры ука¬зываются через запятую без пробела, например, \d{2,5} означает от двух до пяти вхождений любой цифры;
• * — возможность вхождения символа, например, \d* — цифры могут не встретиться в строке или встретиться много раз;
• +— ненулевое количество вхождений символа в строку. \d+— цифра может встретиться один раз или встретиться много раз;
• ? — ноль или одно число вхождений символа в строку, например, \d? — цифра может встретиться один раз или не встретиться совсем.
Регулярное выражение можно разбить на подвыражения с помощью круглых скобок. Каждая группа символов, соответствующих подвыражению, сохраня¬ется в памяти. В дальнейшем группу символов можно извлечь с помощью следующего синтаксиса:
\{Номер группы}
Нумерация групп символов осуществляется согласно их появлению в регулярном выражении:
$pattern = qr/<(.+)>(.*)<\/\1>/;
$str = "<В><и>Подчеркнутый полужирный текст</их/В>";
@Mass = $str =~ /$pattern/; for ($i=0; $i<@Mass; $i++) { print $Mass[$i], "\n";
}
• <.+> — соответствует любому открывающему тегу;
• <(.+)> — с помощью скобок запоминаем имя тега;
• <\Л1>— ищем соответствующий закрывающий тег, который был найден в первых скобках;
• (.*)— сохраняем группу символов между открывающим и закрывающим тегами.
$pattern = qr/<(.+)>(.*)<\/\1>/;
$str = "<В><и>Подчеркнутый полужирный текст</их/В>";
@Mass = $str =~ /$pattern/; for ($i=0; $i<@Mass; $i++) { print $Mass[$i], "\n";
В исходном HTML-коде отобразится:
в
<и>Подчеркнутый полужирный тексте/и>
Первая строка— это символ в первых скобках (в), вторая строка— группа СИМВОЛОВ ВО вторых скобках ("<и>Подчеркнутый полужирный текст</и>").
С помощью круглых скобок можно объединять метасимволы в группы. Рас¬смотрим это на примере проверки правильности ввода E-mail-адреса (лис¬тинг 2.26).
" >л-"
$emails = "unicross@mail.ru";
$pattern = qr/A[a-z0-9_\.\-]+\@([a-z0-9\-]+\.)+[a-z]{2, 4}$/i; if ($emails =~ m/$pattern/) { print "E-mail правильный”;
}
else {
print "E-mail не правильный";
}
Итак, этому шаблону соответствует любой E-mail:
/A[a-z0-9_\.\-]+\@([a-z0-9\-]+\.)+[a-z] {2,4}$/i
Сравнение производится без учета регистра. Метасимвол А указывает привяз¬ку к началу строки, а $ — привязку к концу строки. E-mail разбивается на три части:
• [a-z0-9_\.\-] + — имя ящика, указанное до символа @;
• ([a-z0-9\-]+\.) + — имя поддомена, указанное после символа @, но до на¬звания зоны. Так как поддоменов может быть много, подвыражение [a-zO- 9\-]+\. заключается в круглые скобки, после которых указывается мета¬символ +, указывающий, что подвыражение может встречаться один и бо¬лее раз;
• [a-z] {2,4} — название зоны может содержать только от 2 до 4 букв (ru, com, info).


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


Web сайты на Perl и MySql