Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Парсинг txt файла


Автор: KgCoder 28.12.2009, 11:42
Не могу распарсить txt файл такого содержания:
Цитата

SECTION I. Example title

PART 1. Example title

CONTENT 1. Example title
Example content

CONTENT N. Example title
Example content

PART N. Example title

SECTION N. Another section with very long
title and with line break


Задача состоит в том, чтобы получить заголовки SECTION, PART и CONTENT + содержимое CONTENT. Для получения заголовков использую такие рэгэкспы:
Код

preg_match("/SECTION \w+. (.*)$/m", $i, $o);
preg_match("/PART \w+. (.*)$/m", $i, $o);
preg_match("/CONTENT \w+. (.*)$/m", $i, $o);

Но проблема в том, что некоторые заголовки имеют перенос строки. Помогите составить новое выражения для такого заголовка:
Цитата

SECTION N. Another section with very long
title and with line break

Автор: Veve 28.12.2009, 16:07
Не уверен, что это возможно реализовать в одно действие. 
Как вариант могу предложить следующее
Код

$i="
SECTION I. Example title

PART 1. Example title

CONTENT 1. Example title
Example content

CONTENT N. Example title
Example content

PART N. Example title

SECTION N. Another section with very long
title and with line break
";

echo $i."<br/><br/>";

$title='';
   
while($i!='')
{

    
    $flag=preg_match("/^(?:CONTENT|SECTION|PART) \w+. (.*)/", $i, $o);
    
    if($flag)
    {
        preg_match("/".$o[0]."\n([\s\S]*)/", $i, $o2);
        echo "<font color='red'>".$title."</font><br/>";
        $title=$o[1];
        $i=$o2[1];

    }
    else
    {
        preg_match("/(.*)\n([\s\S]*)/", $i, $o2);
        $title.="\n".$o2[1];
        $i=$o2[2];

    }
  
    
}
echo "<font color='red'>".$title."</font><br/>";

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