[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: DOM или регулярка?
Страницы: 1, 2
ArtemKrass
Всем доброго дня!
Возможно ли средствами PHP получить содержимое в родительском диве при условии присутствия нужной подстроки?

Например, имеем отрывок HTML:


<div>
<div>
Первый div</div>
<div>
Текст</div>
<div>
Текст</div>
<div>
Текст</div>
</div>
<div>
<div><strong>
Дополнительные услуги:</strong></div>
<div>
Нужный DIV</div>
<div>
Нужный DIV</div>
</div>
<div>
<div>
Следующий div</div>
<div>
Текст</div>
<div>
Текст</div>
<div>
Текст</div>
</div>



Нужно получить именно родительский див, в котором присутствует слово "услуги".
<div>
<div><strong>
Дополнительные услуги:</strong></div>
<div>
Нужный DIV</div>
<div>
Нужный DIV</div>
</div>


Как это сделать регулярки или парсить DOM?
Игорь_Vasinsky
нет определённого условия - критерия - как для библиотеки, так и для регулярки

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ArtemKrass
т.е. невозможно?

а если так?
<div>
<div>
Первый div</div>
<div>
Текст</div>
<div>
Текст</div>
<div>
Текст</div>
</div>
<div>
 </div>

<div>
<div><strong>
Дополнительные услуги:</strong></div>
<div>
Нужный DIV</div>
<div>
Нужный DIV</div>
</div>
<div>
 </div>

<div>
<div>
Следующий div</div>
<div>
Текст</div>
<div>
Текст</div>
<div>
Текст</div>
</div>
<div>
 </div>


Т.е. после каждого родительского блока стоит <div>&nbsp;</div>

Пытался регуляркой:
preg_match_all("#услуги(.+?)<div> <\/div>#uis", $html, $result);


Но у меня не срабатывает видимо из-за пробела... Как сделать правильно?
paul85
Правильно использовать DOMdocument с привязкой к ID или к классу. Чем ближе привязался, тем лучше. Идеальный вариант, если интересующий блок имеет свой класс. Чуть печальнее, если родитель, тогда надо идти от него и брать потомков. Вот и всё.

По содержимому парсить плохо, потому, что там возможны опечатки во-первых. А во-вторых, можно регуляркой выдернуть совершенно левый текст, где встретится искомое словосочетание.
ArtemKrass
Так то он так, но в моем случае классы и ID отсутствуют, поэтому приходится приспосабливаться под ситуацию.

Так как быть с пробелом?
ArtemKrass
Pregmatch Отказывается искать <div> <\/div>

Пробовал preg_match_all("#услуги(.+?)<div>&nbsp;<\/div>#uis", $html, $result);
тоже ничего!

Где ошибка? Пол дня мучаюсь...
Игорь_Vasinsky
тебе же не только нужно найти div в котором есть слово "услуги" - но ещё и последующие блоки с описанием, и всё это вместе в одном div

по крайней мере я не вижу здесь простого варианта, вот еслиб у контейнера всего этого был бы класс или id - то проще

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
mvg
Я за DOM
Игорь_Vasinsky
пример покажешь? html в первом посте, но не постоянный

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Oyeme
Используйте DOM в разы удобней и быстрее
ArtemKrass
Dom в моем случае не прокатит, я понял...

В общем вариант один, регулярка!

preg_match_all("#услуги(.+?)<div>\\s<\/div>#uis", $html, $result);

не срабатывает! В чем ошибка?
Игорь_Vasinsky
я уже сказал, это сложный паттерн..я даже пробовать не буду

здесь были умельцы.. но желающих я не вижу пока

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ArtemKrass
Игорь_Vasinsky прав, мой случай не простой. Но я выявил одну особенность, после каждого родителя, обязательно стоит <div>&nbsp;</div>.

Т.е в моем случае должен срабатывать шаблон:

#услуги(.+?)<div>&nbsp;<\/div>#uis

Но это не работает... Ё-мое...

Игорь_Vasinsky
гляну завтра, послезавтра, отпиши html ещё раз

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Guest
Цитата (ArtemKrass @ 22.11.2013 - 21:58)
В общем вариант один, регулярка!

Хватит использовать regexp для html.
В общем html это не регулярный язык и для него нельзя использовать регулярные выражения.
Если кто-то использует regexp в частных случаях, это не означает что их нужно использовать везде.
Быстрый ответ:

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