ArtemKrass
22.11.2013 - 18:16
Всем доброго дня!
Возможно ли средствами 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
22.11.2013 - 18:27
нет определённого условия - критерия - как для библиотеки, так и для регулярки
_____________
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
22.11.2013 - 18:35
т.е. невозможно?
а если так?
<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> </div>
Пытался регуляркой:
preg_match_all("#услуги(.+?)<div> <\/div>#uis", $html, $result);
Но у меня не срабатывает видимо из-за пробела... Как сделать правильно?
paul85
22.11.2013 - 18:51
Правильно использовать DOMdocument с привязкой к ID или к классу. Чем ближе привязался, тем лучше. Идеальный вариант, если интересующий блок имеет свой класс. Чуть печальнее, если родитель, тогда надо идти от него и брать потомков. Вот и всё.
По содержимому парсить плохо, потому, что там возможны опечатки во-первых. А во-вторых, можно регуляркой выдернуть совершенно левый текст, где встретится искомое словосочетание.
ArtemKrass
22.11.2013 - 18:58
Так то он так, но в моем случае классы и ID отсутствуют, поэтому приходится приспосабливаться под ситуацию.
Так как быть с пробелом?
ArtemKrass
22.11.2013 - 19:13
Pregmatch Отказывается искать <div> <\/div>
Пробовал preg_match_all("#услуги(.+?)<div> <\/div>#uis", $html, $result);
тоже ничего!
Где ошибка? Пол дня мучаюсь...
Игорь_Vasinsky
22.11.2013 - 19:55
тебе же не только нужно найти 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
Игорь_Vasinsky
22.11.2013 - 20:52
пример покажешь? 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
Используйте DOM в разы удобней и быстрее
ArtemKrass
22.11.2013 - 21:58
Dom в моем случае не прокатит, я понял...
В общем вариант один, регулярка!
preg_match_all("#услуги(.+?)<div>\\s<\/div>#uis", $html, $result);
не срабатывает! В чем ошибка?
Игорь_Vasinsky
22.11.2013 - 22:06
я уже сказал, это сложный паттерн..я даже пробовать не буду
здесь были умельцы.. но желающих я не вижу пока
_____________
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
22.11.2013 - 22:45
Игорь_Vasinsky прав, мой случай не простой. Но я выявил одну особенность, после каждого родителя, обязательно стоит <div> </div>.
Т.е в моем случае должен срабатывать шаблон:
#услуги(.+?)<div> <\/div>#uis
Но это не работает... Ё-мое...
Игорь_Vasinsky
22.11.2013 - 22:56
гляну завтра, послезавтра, отпиши 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
Цитата (ArtemKrass @ 22.11.2013 - 21:58) |
В общем вариант один, регулярка! |
Хватит использовать regexp для html.
В общем html это не регулярный язык и для него нельзя использовать регулярные выражения.
Если кто-то использует regexp в частных случаях, это не означает что их нужно использовать везде.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.