[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: распарсить html в массив
zezst
Здравствуйте.
Помогите с разобраться. Есть html кусок. Распарсиваю его вот таким выражением:
preg_match_all("<(.+)>", $html, $var);

и местами получаются вот такие куски:
<title>Тут какая-то строка</title>

А хотелось бы их превратить в такое:
<title>
Тут какая-то строка
</title>

Я вообще в регулярках несилен.
Изначально выражение выглядело так:
preg_match_all("|\<!--([^\>]+)\-->|i ", $html, $var);

но как я заметил, на выходе массивы почти идентичны, за исключение того, что пропадало все что между тегами.
zezst
</script><form action="http://www.site.com/index.php?option=com_jnews" method="post" name="modjnewsForm1"><input type="hidden"  value="1" name="subscribed[1]" />

Вот кусок понагляднее. Хотелось бы избежать потерь в конечном html, после того как из него будут удалены все <script>. Вот в таком виде бы его получить
</script>
<form
action="http://www.site.com/index.php?option=com_jnews" method="post" name="modjnewsForm1">
<input
type="hidden" value="1" name="subscribed[1]" />
kristall
Открой для себя радость Simple HTML DOM.
http://simplehtmldom.sourceforge.net/

_____________
echo '<pre>',print_r($var, 1);die;

root@server# make love && war
zezst
Вот хоть убей непонял как получить массив из html
zezst
Все еще нужна помощь. Пришол вот к такому выражению:
"#(<script.*</script>)|(<.+>|-->)|(.+)#msiU"

Благодаря посленим скобочкам, таки сохраняется все что вне тегов, но сохраняется несколько странновато. Каждая буква попадает в отдельную ячейку массива. Подскажите, как правильно сделать, чтоб буковки, между > и < писались все вместе в одну ячейку массива.

З.Ы. ну или подскажите, как достичь того же эффекта при помощи Simple HTML DOM.
zezst
Постепенно пробираясь сквозь дебри регулярок, пришел к такому варианту:
preg_match_all("#<!--.*-->|<script.*</script>|<.+>|.[^<>]{0,}+#msiU", $smith_site, $regs3);


теперь, как и хотелось, получил:
    [38] => <title>
[39] => CBRNE threat detection solutions from Smiths Detection
[40] => </title>


Но обнаружился еще один неприятный момент, который бы хотелось исправить:

[120] => <label for="jflanguageselection" class="jflanguageselection">
[121] => JFMSELECT
[122] => </label>
[123] =>

[124] => <select name="lang" class="jflanguageselection" size="1" onchange="document.location.replace(this.value);">


По всему массиву вылезли пустые элементы. Хотелось избавится от них в том же выражении. Если кто может помочь, буду очень признателен.
zezst
Может кому пригодится, вот решение:
preg_match_all('#<!--.*-->|<script.*</script>|<.+>|(?!\s+?<|\Z)[^<>]+?#siU', $smith_site, $regs3);

Концовочку не сам додумал (а жаль).
phpinfo
Для удаление пустых значений так же можеш использовать функцию array_map так же в союзе с trim одна удаляет пробелы с лева и с права тексте массива
zezst
array_map - про эту функцию в курсе. Тут уже хотелось, раз нагрузили сервак регуляркой, дык нехай еще и эту задачку рэшит.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.