#php #regex
#php #регулярное выражение
Вопрос:
Я не могу понять, как получить только те ‘div’-ы (с содержимым), которые не содержат других div (ов).
Например:
<div id='first'>
...
<div id='second'>
...
</div>
</div>
<div id='third'>
...
</div>
И мне нужно только содержимое «второго» и «третьего» разделов, открывающие и закрывающие теги, потому что они не включают другие разделы.
Я попробовал этот шаблон: ~(<div id='[a-z]. ')(.*?)(</div>)~s
но это не нормально.
Надеюсь, я понял … заранее благодарю вас!!
Комментарии:
1. еще один синтаксический анализ html с регулярным выражением
Ответ №1:
Хотя я не сторонник использования rexex для извлечения HTML, эта проблема намного проще с xpath и DOM.
$dom = new DomDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$divs = $xpath->query("//div[not(div)]");
Я не тестировал этот код. Но ключевой частью является оператор not, который находит все divs без дочернего узла div.
Комментарии:
1. Спасибо за ваш ответ! Да, это должно быть проще с xpath, но я действительно хотел бы знать, как поступить с регулярным выражением, если это возможно, конечно.
2. Я не уверен, возможно ли это. Возможно, но это было бы очень сложно. Что не так с xpath, они очень просты в использовании в PHP, просто найдите в SO всю необходимую информацию.
3. Ничего плохого, мне просто было интересно, возможно ли это сделать с помощью регулярного выражения. Так что еще раз спасибо. Я использую xpath!