Многострочный поиск

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

$_ = "I'm much better\nthan Barney is\nat bowling,\nWilma.\n";

Якоря ^ и $ обычно привязываются к началу и концу всей строки. Но флаг /m также позволяет им совпадать в позициях внутренних новых строк. Таким образом, они превращаются в якоря логических, а не физических строк. В приведенном примере совпадение будет найдено:

print "Found 'wilma' at start of line\n" if /^wilma\b/im;

Многострочная замена выполняется аналогично. В следующем примере весь файл читается в одну переменную2, после чего имя файла выводится в начале каждой строки:

open FILE, $filename
or die "Can't open '$filename': $!";
my $lines = join '', ;
$lines =~ s/^/$filename: /gm;

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
m// в списочном контексте
Глобальная замена (/g)
Другие возможности регулярных выражений
Другие ограничители
Замена с использованием оператора s///