Forum Webscript.Ru

Программирование => Perl => Тема начата: bess от 06 Декабря 2002, 07:43:25

Название: Чтение блока текста
Отправлено: bess от 06 Декабря 2002, 07:43:25
Есть такая задача - поиск RE куска текста, т.е. я так хочу делать, а счас все работает построчно. Т.е. чтение текстового файла. Нужно найти текст, заключенный меж 2 управляющих слов (рубрика и статья):

рубрика:
название рубрики

статья:
текст текст текст...


т.е. что-то вроде /^рубрика:$.*^статья:$/m/g

Подскажите плиз как это ПРАВИЛЬНО сделать, чтоб быстро искать такие блоки текста?
Название: Чтение блока текста
Отправлено: NeoNox от 06 Декабря 2002, 11:26:33
Смысл такой:

$text=~/rubrika(.*)statya/g;
print $1;
Название: Чтение блока текста
Отправлено: YA от 06 Декабря 2002, 14:48:00
bess, вместо модификатора "/m" используй "/s", а "/" между модификаторами не нужен:

print $1 if $text=~/рубрика:(.*?)статья:/s;

или, если может быть несколько совпадений:

print "$1\\n" while $text=~/рубрика:(.*?)статья:/sg;
Название: Чтение блока текста
Отправлено: bess от 07 Декабря 2002, 04:07:46
Спасибо, понял. Только почему /s если я ищу в блоке, а не в 1 строке?
Название: Чтение блока текста
Отправлено: YA от 07 Декабря 2002, 10:15:27
Цитировать
почему /s
Модификатор "/s" - разрешает "." соответствовать символам перевода строки.