ru en uk

  авторизация

(044) 362 48 16   (098) 294 41 60



Home   |   Articles   |   Other topics

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

     Регулярные выражения используются для нахождения шаблонов в строках. Например, для того, чтобы найти в телефонной книге конкретное имя, или,например, все имена, начинающиеся с буквы 'a'. Работа с регулярными выражениями является одной из самых мощных и полезных, и в тоже время самых сложных для понимания особенностей Perl. Надеемся, что после прочтения этой статьи вы поймете, насколько это мощный и удобный инструмент. Получив некоторый опыт вы сможете использовать эти возможности с большой пользой для себя.
Операторы

     Для работы с регулярными выражениями в Perl используются три оператора
  - оператор сравнения (matching - m//), оператор подстановки
(substitution s///) и оператор перевода (translation - tr///).

     Все три оператора используют переменную $_ по умолчанию, поэтому
дальше, пока не будут представлены операции =~ и !~, будем
пользоваться ею.

     Оператор сравнения проверяет, подходит ли проверяемое выражение под
шаблон, и возвращает значение 1, если это так, и значение 0 в
противном случае. Запись этого оператора состоит из буквы m,
разделителя (чаще всего это косая линия - /, но в принципе это может
быть почти любой символ), шаблона и еще одного разделителя (такого же,
как и первый :).

Оператор сравнения
$_ = ;
if (m/hello/) {
print "hello user\n";
}

if ($input{'siteurl'} =~ #http://#) {
print $input{'siteurl'};
}

     В этом примере проверяется, есть ли в строке, полученной со
стандартного входа, слово 'hello'. Если это так (оператор m// вернет
значение 1), то на стандартный выход вернется фраза 'hello user'.

     Примечание:вообще-то символ 'm' является необязательным, поэтому
оператор из этого примера может выглядеть просто как /hello/.

     Оператор подстановки находит в строке все подстроки, удовлетворяющие
шаблону, и заменяет их некоторым другим значением. Запись этого
оператора состоит из буквы s, указывающей на то, что это собственно
оператор подстановки и исходного (что заменять) и подстановочного (на
что заменять) шаблонов, разделенных разделителями.

     Оператор подстановки
$_ = 'My name is Fred';
# oh no, my name is Jonathan!
s/Fred/Jonathan/;

     В этом примере в строке $_ все слова Fred будут изменены на Jonathan.

     Оператор перевода также производит подстановку, но несколько другого
характера - он используется для замены отдельных символом некоторыми
другими (определенными) символами. Синтаксис этого оператора похож на
синтаксис оператора подстановки, с тем отличием, что во-первых он
очевидно начинается с букв tr, а между разделителями вставляются не
шаблоны, а группы символов, первая - исходные символы, вторая -
подстановочные, причем соответствующие символы должны стоять на
одинаковых позициях в своих группах - если вы хотите заменить,
например латинскую 'm' на кириллическую 'м', они должны стоять на
одинаковых местах: 'm' - в первой группе символов, 'м' - во второй.

     Оператор перевода
$_ = 'hi.there, my.name.is.jonathan,';
tr/.,/ !/;

     В этом примере все запятые будут изменены на восклицательные знаки, а
точки - на пробелы.

Модификаторы

     Возможности каждого из этих операторов можно расширить при помощии
модификаторов. Модификаторы - это грубо говоря символы которые
дописываются к оператору (например, так - s/fred/Jonathan/i), говоря о
том, как ему нужно разбирать рабочее значение.

     Модификаторы для оператора сравнения:
g - находит все найденные подстроки;
i - игнорирует регистр символов в строке;
m - рассматривает строку как многострочное значение;
s - рассматривает строку как однострочое значение;
x - позволяет использовать расширенные регулярные выражения;

Модификаторы для оператора подстановки:
e - вычисляет подстановочное выражение перед подстановкой;
g - находит все найденные подстроки;
i - игнорирует регистр символов в строке;
m - рассматривает строку как многострочное значение;
s - рассматривает строку как однострочое значение;
x - позволяет использовать расширенные регулярные выражения.

Модификаторы

$_ = 'My name is Fred';
s/fred/Jonathan/i; # My name is Jonathan
s/jonathan/routine()/ie; # My name is [something]
Операции =~ и !~

     Операции =~ и !~ позволяют использовать с операторами m//, s/// и
tr/// любые переменные, а не только $_, которая используется этими
операторами по умолчанию.

     Оператор =~ выполняет те же функции, что и оператор присваивания '='
(в случае использования с операторами s/// и tr///) и оператор
сравнения 'eq' (при использовании с оператором m//).

     Операция =~
$name = 'my name is Fred';
$name =~ s/fred/Jonathan/ig;

$string = 'hello world';
if ($string =~ /hello/i) {
print 'helloworlded in this string.';
}

     Аналогично, операция !~ используется так же как и операция 'ne' (ее
написание подобно операции чисельного сравнения !=), используется
только с оператором сравнения и означает отрицание удовлетворения
шаблону.

     Операция !~
$string = 'good';
if ($string !~ /bad/) {
print "hey, it's not too bad yet!";
}

Память

     И напоследок - о возможности более удобно работать с результатами
обработки регулярных выражений, а именно о хранении их в отдельных
переменных. Такими переменными являются предопределенные $&, $`, $', и
набор переменных $1, $2, ..., $9.

Переменная $&

      Эта переменная предназначена для хранения фрагмента строки, который
удовлетворил шаблону, заданному регулярным выражением. Это удобно в
таких случаях, как, например, если нужно найти число в строке, но
неизвестно, что это за число. Вот как это может выглядеть:

$string = "error 404."
$string =~ m/\d+/;
$number = $&; # $number содержит "404"

Переменные $` и $'

     Эти переменные служат для хранения фрагментов, которые не
удовлетворили шаблону, а именно подстрок, которые стоят до и после
результата соответственно. Другими словами, после операции, например,
сравнения, значение исходой строки разделяется на три части - часть,
которая подошла под шаблон, и фрагменты, которые идут перед ней и
после нее. Эти части и помещаются в переменные $&, $` и $'
соответственно. (Обратите внимание на то, что в первой переменной -
обратная кавычка, а во второй - прямая). Посмотрим на предыдущий
пример.

$string = "error 404."
$string =~ m/\d+/;

$number = $&; # $number содержит "404"
$before = $`; # $before содержит "error"
$after = $'; # $after содержит "."
Переменные $1..$9

     Эти переменные служат для хранения фрагментов строки, которые
удовлетворили соответсвующим определенным фрагментам шаблона. В
шаблоне фрагменты выделяются при помощи скобок. Каждому фрагменту
выделяется номер в том порядке, в котором они расположены, и
соответствующая переменная будет содержать его значение.

$string = "this is to be uppercased";
$string =~ s/(upper\w+)/uc($1)/;
# $string = "this is to be UPPERCASED"

$string = "15 apples, 2 foos, 3 bars";
while ($string =~ m/(\d+) (\w+)/g) {
print "$2: $1\n";
}
# Выведет apples: 15
# foos: 2
# bars: 3

У нас разработка сайта Киев так же не обходится без использования технологии Perl


 
Как отослать почту
29.05.2007
Если Вам нужно послать сообщение администратору, пользователю, сделать рассылку, отправить отчет по електронной почте, то проще всего это сделать с помощью встроенной функции mail()...
Работа с базами данных
29.05.2007
Первое, что нужно для создания динамических страничек - база данных, где будет храниться вся информация. Хотите иметь возможность просматривать содержимое таблиц баз данных, делать выборки, добавлять или обновлять данные? Все это можно делать с помощью встроенных функций в РНР ...
Введение в PHP5
29.05.2007
PHP5 ещё официально не вышел, но "рабочие" версии уже трудоспособны (равно как и нестабильны!), так что мы вполне можем начать изучение новых возможностей грядущего релиза PHP и попрактиковать с ними. В этой статье мы поговорим о трёх основных нововведениях в PHP5