блин, совсем меня штырит =) вобщем, простенькая задачка: есть файл вида: HTML: <p>вопрос1</p> <p>ответ1</p> <p>ответ2</p> <p>ответ3</p> <p>ответ4</p> <p>ответ5</p> <img> <hr> <p>вопрос2<p> <p>ответ1<p> <p>ответ2<p> <p>ответ3<p> <hr> нужно с помощью пхп привести его в вид: вопрос1|ответ1|ответ2|ответ3........ вопрос2|ответ1|ответ2|ответ3........ и т.д. в долгу не останусь
если в вопросе всегда есть знак вопроса '?', то можно взять все ~<p>([^<]*\?)</p>~ будут вопросы, а ~<p>([^<?]*)</p>~ - ответы
Если текст именно такой, то можно в принципе просто заменой распарсить...но лучше конечно по регулярке... PHP: <?php $a = '<p>вопрос1</p> <p>ответ1</p> <p>ответ2</p> <p>ответ3</p> <p>ответ4</p> <p>ответ5</p> <img> <hr> <p>вопрос2</p> <p>ответ1</p> <p>ответ2</p> <p>ответ3</p> <hr>'; $a = str_replace('<p>', ' ', $a); $a = str_replace('</p>', '|', $a); $a = str_replace('<hr>', "\n", $a); $a = strip_tags($a); echo $a; ?> Ещё раз повторю что имхо лучше регуляркой, а то щас умники будут возникать...
Толком не понял, как должен выглядеть результат, нужно по тегу <hr> раздулять ещё на строки? А тег <img> к чему? И почему во второй части заданного тс примера теги <p> не закрывающиеся в конце строк? Сделал как понял и первое, что пришло в голову PHP: $txt="<p>вопрос1</p>\n<p>ответ1</p>\n<p>ответ2</p>\n<p>ответ3</p>\n<p>ответ4</p>\n<p>ответ5</p>\n<img>\n<hr>\n<p>вопрос2</p>\n<p>ответ1</p>\n<p>ответ2</p>\n<p>ответ3</p>\n<hr>"; $txt=str_replace('</p>','',$txt); $txt=str_replace('<img>','',$txt); //не понял, зачем <img>, удаляем $txt=str_replace("\n",'',$txt); $txt=explode('<hr>',$txt); $ans=''; foreach($txt as $txt2) { $txt2=explode('<p>',$txt2); foreach($txt2 as $txt3) { if($txt3) $ans.=$txt3.'|'; } $ans.="\n"; } print_r($ans); Хотя если б было точнее условие, написал бы регулярку наверно)
что б особо не извращаться с составлением выражения можн распарсить в два подхода... код ниже PHP: <?php $str = file_get_contents('1.txt'); $pattern = "!(.+)<hr>!Uis"; preg_match_all($pattern, $str, $res); $pattern = "!<p>(.+)</p>!Uis"; foreach($res[1] as $row){ preg_match_all($pattern, $row, $tmp); } в результате на каждой итерации в массиве $tmp будет 0-й элемент - это вопрос, остальные - ответы.
всем огромное спасибо!!! выручили как всегда =) проставлюсь завтра (Вы добавили слишком много репутации...) =)
PHP: <?php $ff = file_get_contents('a.htm'); $a = explode("<hr>",$ff); $a = preg_replace('/\r\n/', '', $a); $a = preg_replace('/<p>([^<]*)<\\/p>/', '$1|', $a); $a = preg_replace('/<[\/\!]*?[^<>]*?>/', '', $a); for ($i = 0; $i < count($a); $i++){ echo substr($a[$i], 0, -1)."<BR>\r\n"; } ?>
Йа извращенец =/ PHP: <?php $a = '<p>вопрос1</p> <p>ответ1</p> <p>ответ2</p> <p>ответ3</p> <p>ответ4</p> <p>ответ5</p> <img> <hr> <p>вопрос2</p> <p>ответ1</p> <p>ответ2</p> <p>ответ3</p> <hr>'; $arr = explode('<hr>', $a); for($i=0; $i<count($arr); $i++) { $str = explode(' ', strip_tags(trim($arr[$i]))); echo implode('|', $str).'<br/>'; } ?>