@buxo

Как составить регулярное выражение для парсинга списка на HTML?

Помогите написать парсер.
Я уже перепробовал несколько вариантов, но у меня ни чего не выходит. Вроде кажется легко, но на самом деле стало непосильной задачей.
Необходимо, из такого текста:
<html>
<head><title>Hello Wold</title></head>
<style>
.color{gray;}
</style>
<body>
  <div id="person1">
    <div>Имя: Евгений</div>
    <span><a href="profile.html?id=person1">Профиль</a></span>
    <script> var text='<div id="person1"><blalblalbla>'; </script>
    <div><div>Ещё описание</div></div>
  </div>
  <div id="person2" class="active">
    <div>Имя: Сергей</div>
    <span><a href="profile.html?id=person1">Профиль</a></span>
    <span>123</span>
  </div>
  <div id="person3">
    <div>Имя: Иван</div>
    <span><a href="profile.html?id=person1">Профиль</a></span>
    <div><div>Ещё описание</div></div>
    <span>123</span>
  </div>
  <div id="person4">
    <div>Имя: Пётр</div>
    <span><a href="profile.html?id=person1">Профиль</a></span>
    <div><div>Ещё описание</div></div>
  </div>
</body>
</html>

Получить примерно такой массив:
$arr=array(
[0]=>'
  <div id="person1">
    <div>Имя: Евгений</div>
    <span><a href="profile.html?id=person1">Профиль</a></span>
    <script> var text=\'<div id="person1"><blalblalbla>\'; </script>
    <div><div>Ещё описание</div></div>
  </div>
',
[1]=>'
  <div id="person2" class="active">
    <div>Имя: Сергей</div>
    <span><a href="profile.html?id=person1">Профиль</a></span>
    <span>123</span>
  </div>
',
[2]=>'
  <div id="person3">
    <div>Имя: Иван</div>
    <span><a href="profile.html?id=person1">Профиль</a></span>
    <div><div>Ещё описание</div></div>
    <span>123</span>
  </div>
',
[3]=>'
  <div id="person4">
    <div>Имя: Пётр</div>
    <span><a href="profile.html?id=person1">Профиль</a></span>
    <div><div>Ещё описание</div></div>
  </div>
');


Разбор XML пожалуйста не предлагайте. Я пытаюсь разобраться в составлении регулярных выражений, поэтому мне очень важно понять как это сделать при помощи регулярок.
  • Вопрос задан
  • 1018 просмотров
Решения вопроса 1
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Так?
preg_match_all("/<div id=\"person[0-9]+\".+(?:<\/div>)(?!<\/div)/i", $res, $str);


Я пытаюсь разобраться в составлении регулярных выражений, поэтому мне очень важно понять как это сделать при помощи preg_match_all

Это плохой пример для разбора - лучше работайте с текстом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
BuriK666
@BuriK666
Компьютерный псих
Используйте DOMDocument или SimpleXML
Ответ написан
simplehtmldom.sourceforge.net простая библиотека и очень удобная
Ответ написан
@buxo Автор вопроса
Виталий Инчин , посоветуйте пожалуйста ещё где можно доступно почитать про это (?:) (?!) И вообще понятную документацию на русском по RegExp, а то везде пишут либо "для новичков" (не затрагивая сложные конструкции) либо слишком сложно, без примеров, засыпая огромным количеством терминов, которые также не объясняются подробно.
Ответ написан
@hobo-mts
Shortly
(?:) -- кластеризация без захвата, (?!) -- отрицательное заглядывание вперёд. См. Джеффри Фридла "Регулярные выражения" и Книгу с Верблюдом (оттуда это растёт).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы