Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

27.03.2008, 20:58
|
|
Участник форума
Регистрация: 27.11.2007
Сообщений: 233
Провел на форуме: 1379382
Репутация:
378
|
|
как отпарсить?
блин, совсем меня штырит =)
вобщем, простенькая задачка: есть файл вида:
Код 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. .......
и т.д.
в долгу не останусь 
|
|
|

27.03.2008, 21:14
|
|
Banned
Регистрация: 06.01.2008
Сообщений: 904
Провел на форуме: 4037638
Репутация:
1821
|
|
нужно с помощью пхп привести его в вид:
Можно на Delphi реализовать
|
|
|

27.03.2008, 21:16
|
|
Участник форума
Регистрация: 27.11.2007
Сообщений: 233
Провел на форуме: 1379382
Репутация:
378
|
|
Сообщение от De-visible
Можно на Delphi реализовать
блин. в принципе, не принципиально, но хотелось бы на пхп 
|
|
|

27.03.2008, 21:25
|
|
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме: 5128756
Репутация:
2032
|
|
если в вопросе всегда есть знак вопроса '?', то можно взять все ~<p>([^<]*\?)</p>~ будут вопросы, а ~<p>([^<?]*)</p>~ - ответы
|
|
|

27.03.2008, 21:28
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
Если текст именно такой, то можно в принципе просто заменой распарсить...но лучше конечно по регулярке...
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;
?>
Ещё раз повторю что имхо лучше регуляркой, а то щас умники будут возникать...
|
|
|

27.03.2008, 21:30
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Толком не понял, как должен выглядеть результат, нужно по тегу <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);
Хотя если б было точнее условие, написал бы регулярку наверно)
Последний раз редактировалось d_x; 27.03.2008 в 21:33..
|
|
|

27.03.2008, 21:32
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
что б особо не извращаться с составлением выражения можн распарсить в два подхода... код ниже
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-й элемент - это вопрос, остальные - ответы.
|
|
|

27.03.2008, 21:58
|
|
Участник форума
Регистрация: 27.11.2007
Сообщений: 233
Провел на форуме: 1379382
Репутация:
378
|
|
всем огромное спасибо!!! выручили как всегда =)
проставлюсь завтра (Вы добавили слишком много репутации...)
=)
|
|
|

27.03.2008, 22:01
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
Сообщение от 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";
}
?>
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|

27.03.2008, 22:01
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
блин..не успел 
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|