"Дмитрий Леонов. Использование Perl в интернет-технологиях" - читать интересную книгу авторасо строкой, а одна из последующих частей - нет, механизм поиска
возвращается к началу и пытается найти новое совпадение. Если части шаблона заключены в круглые скобки, то включается механизм запоминания, и части строки, которые им соответствуют, будут последовательно присваиваться переменным $1, $2, $3 и т.п.: $s = 'abbbbb'; $s =~ s/a(.*)b/c/; # в $1 будет находиться строка "bbbb" Другой способ запоминания части строки - использование кодов \1, \2 и т.п. непосредственно в шаблоне: $s = 'abbbbb'; $s =~ s/a(.*)b/\1c/; # результирующая строка содержит "bbbbc" Возможно использование одного из нескольких шаблонов: /текст1|текст2|текст3/ а также их комбинация с помощью скобок: /(a|b)c/; Чтобы не включать здесь режим запоминания, используют запись /(?:a|b)c/; Образец может быть зафиксирован относительно позиции в строке: /^a.*b$/ соответствует строке, начинающейся с a и заканчивающейся b, а директива \b требует, чтобы совпадение с образцом происходила только на границе слова. Если в образце участвует переменная, то перед сопоставлением происходит ее интерполяция, таким образом, можно строить регулярное выражение на показана опасность этого подхода, пока же отметим, что для отмены интерполяции используется управляющая последовательность \Q...\E, предваряющая все спецсимволы в строке обратной косой чертой и превращающая их тем самым в простые символы: /\Q$var\E/ Директива tr позволяет заменить все вхождения символов из списка в строке на другие: $s =~ tr/abcde/ABCDE/; Параметр /e заставляет рассматривать заменяющую строку директивы s как Perl-выражение: $s =~ s/(.)/sprintf("[%s]", $1)/eg; (бесполезный пример, расставляющий квадратные скобки вокруг каждого символа строки и демонстрирующий работу функции форматного вывода в строку sprintf). Регулярные выражения очень удобно использовать для разбивки строки на составляющие - например, значение, хранящееся в DBM-файле, удобно разбить на поля, сымитировав более сложную таблицу. Для этого в Perl существует функция split. Первый ее параметр - регулярное выражение, рассматривающееся как разделитель строки, идущей вторым параметром. Все элементы строки, не совпадающие с регулярным выражением, последовательно помещаются в массив, возвращаемый функцией split: $s = 'abc:def:ghi'; |
|
|