"Прежде чем что-то, кому-то советовать, проверяйте все таки это у себя." ыыыы, во-во, вот и проверь-те: PHP: <? $in= '<div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div>'; if (preg_match_all('/<div class="a1">(.*)<\/div>/s', $in, $result)) echo 'Оле!'. "\r\n"; else echo 'Нету такого'; print_r ($result); ?> ЗЫЖ Чем дальше в лес, тем глубже человек загоняет себя в задницу Пуся, я всегда и абсолютно всё проверяю, прежде чем сюда выкладывать
))) И? Вы чо тут, сговорились что ли?)) В итоге все равно раздельных значений нет)))))) Все равно explode применять)) И если сделать: PHP: $t = explode("\r\n", $result[0][0]); print_r ($t); То там те же пустые строки присутствуют, да еще только первых двух значений А моя регулярка в разы проще, и, что самое главное, корректней
а по делу? Гы-гы просто ЗЫЖ Продолжаем разговор. Сами запустите свой скрипт хоть разок и посмотрите, чо там, где да как ЗЗЫЫЖЖ Я в шоке сегодня с некоторых доселе уважаемых мною личностей PS: И еще, чтобы безосновательно не тыкать в меня пальцем и не кричать "ОН ЛАМО!" (я не знаю, может у тебя любовь там с Gifts или еще что) может выложим готовый код по решению задачи Gifts-а именно в том ручье, в котором он думает, оно ему надо? Не просто регулярку какую-то взятую с неба и абсолютно бестолковую на мой взгляд, а код, от А до Я, как у меня? Тогда и сравним, чей код быстрей, правильней и оптимальней Пока я тут наблюдаю только один рабочий код - а именно свой. Со всем риспектом и etc.
Хорошо, чтобы не быть голословными, разберём результаты работы двух вариантов. Итак, для начала выясним, сколько было всего найдено совпадений. У твоего варианта - одно, что уже фейл. Вот это совпадение, начинается на начале первого блока и захватывает заодно и второй (было бы их там 200, всё равно совпадение было бы одно): PHP: [0] => Array ( [0] => <div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div> ) Теперь совпадения подмасок. Тоже одно: PHP: [1] => Array ( [0] => <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> ) Собственно, аналогичное для второго варианта: Совпадения регулярки: PHP: [0] => Array ( [0] => <div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> [1] => <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div> ) Совпадания подмасок: PHP: [1] => Array ( [0] => <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> [1] => <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div>
Я извиняюсь, а вы последнюю версию моего скрипта запускаете или где? По всей видимости вы юзаете мою ПЕРВУЮ регулярку, заточенную под сайты, а не под бредовые требования Giffts-а. Господа, будьте внимательней, в последнем варианте моего скрипта совсем другая регулярка. ЗЫЖ Продам очки, недорого Вот моя последняя и вполне рабочая версия, можете найти её несколько выше, еще до Вашего первого поста по этой задаче: PHP: <? $in= '<div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div>'; if (preg_match_all('/<div class="a1">(.*)<\/div>/s', $in, $result)) echo 'Оле!'. "\r\n"; else echo 'Нету такого'; $t = explode("\r\n", $result[0][0]); $count = count($t); for ($i=0;$i<$count;$i++) { if (!empty($t[$i])) {echo $t[$i];} } ?>
Выводит вот это: PHP: Оле! <div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div> Разумеется PHP: <?php $in = '<div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div>'; preg_match_all('~<div class="\w\d">((?:[^<>]+|(?R))*)</div>~si', $in, $data); print_r($data[1]); ?>
2 astrologer: Надеюсь теперь увидели, о каком коде идёт речь? "Пост 102" - лихо конечно, но пока не в тему. Жду от вас с нетерпением Вашего кода. Желательно предварительно проверенного и рабочего Но готов и просто принять "Паша, ты был прав, о чем тут писать дальше - просто не вижу смысла". А то флудильня получается. А яйцами с вами меряться мне недосуг, ибо голые факты пока за меня, если без эмоций
Жаль расстраивать, но факты против тебя. Ты был неправ, о чём тут писать дальше - просто не вижу смысла.
ыыыыы, интересненько, а у меня выводит вот это: а поводу вашего я написал сразу же после вашего кода, Ваш код нерабочий, ппц, имхо ЗЫЖ Ребята, к Chaak в ЛС хоть пройдите, а то мне уже неудобно тут с вами. Незлобный я в принципе
"Надо исходник смотреть, как все делают." ыыыыыы, отсыпьте, чо вы там с Giffts-ом покурили, усыхаю с вас))))))))))))))
Сегодня день срача?) То в одной теме, то в другой...ппц это у тебя на экран выводит, а в исходном коде всё равно дивы) Но тут можно избавиться от них ф-цией strip_tags() А отпарсить парный див в данном случае думаю невозможно, т.к. либо парсить всё, либо до первого дива с модификатором U. Поэтому в данном случае регулярка Pashkela имеет смысл, но немного недоработана. Вот немного переделал: PHP: preg_match_all('#<div[^>]*>([^>]*)</div>#sU', $in, $result); print_r($result); результатом будет: Code: [1] => Array ( [0] => sometext1 [1] => sometext2 [2] => sometext3 [3] => sometext4 ) ) Чистый текст, что у нужен был Gifts`у
Я таки домучал эту штуку PHP: <pre><?php $in='<div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> <div class="d1"> <a href="somelink">asdasasd</a> </div> </div> </div> </div> '; $start=microtime(true); if (preg_match_all('~<div[^>]*>((?(?=(?>(<div|</div>)))(?R)|[\s\S])*)</div>~si', $in, $result, PREG_SET_ORDER)) foreach ($result as $one) echo htmlspecialchars($one[1])."\r\n-----------------------------\r\n"; echo microtime(true)-$start; Находит весь текст между дивами верхнего уровня, для любой глубины вложенности .:EnoT:. Боюсь, что банальная ссылка внутри дива заставит регулярку пропустить эту ссылку astrologer Спасибо за направление для копания)
Pashkela Как обезьянка, ей-богу PHP: $in= '<div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div>'; echo "<h1>До регулярки:</h1><br>\r\n"; var_dump(htmlspecialchars($in)); echo "<h1>После регулярки:</h1><br>\r\n"; if (preg_match_all('/<div class="a1">(.*)<\/div>/s', $in, $result)) var_dump(htmlspecialchars($result[0][0])); echo "<br><h1>А теперь внимание, найдите десять отличий</h1>";
PHP: <h2> <a href="/News/Detail/id/325474/cat/66/" > Почему опустели офисы?</a> </h2> Для такого html кода какая будет регулярка что бы ссылку... Тлоько что бы в регулярке были теги <h2> и </h2>...т.к. на странице с которой грабишь много ссылок вида <a href="">.... нужны ссылки которые именно в тегах <h2> и </h2> находяься...