Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > анализ многострочного файла


Автор: shtuceron 11.10.2011, 10:47
Здравствуйте, возможно ли находить заданный по шаблону текст в файле?

Я знаю, что во первых нужно считывать весь файл и анализировать его, для это я использую:
Код

undef $/;

while (<>)
{
    if ($_ =~ m%<tag>(.*?)</tag>%i)
    {
        print "$1\n";
    }
}


НО, ничего увы не выходит, как же тогда найти совпадения?
Код

<xml>
<tag>
I Want this text!
</tag>  
</xml>

Автор: ginnie 11.10.2011, 10:54
shtuceron, в регулярном выражении . не захватывает перевод строки, поэтому совпадений не получается. Для того, чтобы . захватывала перевод строки надо в регулярном выражении указать модификатор s: m%<tag>(.*?)</tag>%is

Автор: alezzz 11.10.2011, 10:56
Добавте модификатор s, у вас точка не совпадает с переходом строки. Или замените на ([^<]+)

Автор: shtuceron 11.10.2011, 10:56
Спасибо!

Автор: Pilat66 13.10.2011, 05:44
Не верю, что все или хотя бы один из вышеприведённых советов мог сработать. Тут же построчный анализ, какой тут 's' модификатор может быть? Разве что весь файл прочитать как одну строку и while(/.../gso){...} сделать, но с большим файлом это не прокатит.

Автор: alezzz 13.10.2011, 07:41
А и не нужно верить, вы сначала попробуйте. Когда будете пробовать то не забудте про undef $/;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)