Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   как отпарсить? (https://forum.antichat.xyz/showthread.php?t=65639)

x88x 27.03.2008 20:58

как отпарсить?
 
блин, совсем меня штырит =)

вобщем, простенькая задачка: есть файл вида:
Код 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. .......

и т.д.
в долгу не останусь ;)

De-visible 27.03.2008 21:14

Цитата:

нужно с помощью пхп привести его в вид:
Можно на Delphi реализовать

x88x 27.03.2008 21:16

Цитата:

Сообщение от De-visible
Можно на Delphi реализовать

блин. в принципе, не принципиально, но хотелось бы на пхп :rolleyes:

Piflit 27.03.2008 21:25

если в вопросе всегда есть знак вопроса '?', то можно взять все ~<p>([^<]*\?)</p>~ будут вопросы, а ~<p>([^<?]*)</p>~ - ответы

.:EnoT:. 27.03.2008 21:28

Если текст именно такой, то можно в принципе просто заменой распарсить...но лучше конечно по регулярке...
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;
?>

Ещё раз повторю что имхо лучше регуляркой, а то щас умники будут возникать...

d_x 27.03.2008 21:30

Толком не понял, как должен выглядеть результат, нужно по тегу <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); 

Хотя если б было точнее условие, написал бы регулярку наверно)

VDShark 27.03.2008 21:32

что б особо не извращаться с составлением выражения можн распарсить в два подхода... код ниже
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-й элемент - это вопрос, остальные - ответы.

x88x 27.03.2008 21:58

всем огромное спасибо!!! выручили как всегда =)
проставлюсь завтра (Вы добавили слишком много репутации...)

=)

desTiny 27.03.2008 22:01

Цитата:

Сообщение от x88x
блин, совсем меня штырит =)

вобщем, простенькая задачка: есть файл вида:
Код 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. .......

и т.д.
в долгу не останусь ;)

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";
}
?>


desTiny 27.03.2008 22:01

блин..не успел:(

x88x 27.03.2008 22:07

Цитата:

Сообщение от desTiny
блин..не успел:(

все равно спасибо =)
радует такое количество помогающих ;)

.:EnoT:. 27.03.2008 22:07

Йа извращенец =/
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/>';
}
?>



Время: 03:01