pHp регулярные выражения

12
siv1987
На сайте с 02.04.2009
Offline
427
#11

'/<div class="class1">Цитата:<div class="(?:class2)?"><blockquote>(.+?)</blockquote></div>(.+?)</div>\s*</td>/s'

SEO-MAN
На сайте с 25.06.2007
Offline
187
#12

Что то не получается ((

А зачем второй символ "/" ?

Вот точная цитата кода, 3 примера:


<div class="class1">Цитата:<div class="class2"><blockquote>текст цитаты</blockquote></div><br />нужный текст сообщения<br /><br /><div class="другой ненужный">ненужное</div></div>
</td>

<div class="class1">Цитата:<div class="class2"><blockquote>текст цитаты</blockquote></div><br />нужный текст сообщения<img src=" ...gif" alt="" /> <img src="...gif" alt="" /></div>
</td>

<div class="class1">нужный текст сообщения</div>
</td>
Форум сео (http://forum-seo.net) для новичков автоматическая регистрация в 30000 каталогах за 5$ (/ru/forum/157861) Нужна доработка 2 досок объявлений - avtopmr.net, pmrdom.com (вип объявления и удаление дублей)
siv1987
На сайте с 02.04.2009
Offline
427
#13

Экранируйте разделитель шаблона в тегах - /, либо поменяйте delimiter на решетку

SEO-MAN:
3 примера:
SEO-MAN:
<div class="class1">нужный текст сообщения</div>
SEO-MAN:
class2 встречается не всегда..

class2, и блок class2 это немного разные вещи. Советую писать в будущем писать конкретнее, чтобы люди вас правильно поняли и не было неоднозначности.

---------- Добавлено 25.05.2014 в 18:46 ----------

preg_match_all('#<div class="class1">(?:Цитата:<div class="class2"><blockquote>(.+?)</blockquote></div>(.+?)|(.+?))</div>\s*</td>#s', $str, $out);

print_r($out);

mvg
На сайте с 16.08.2011
Offline
62
mvg
#14

Ребята, Хелп!

Есть скрипт, который тянул курс евро с cbr.ru

С некоторого времени он не отрабатывает, полагаю сменилась верстка. Необходимо подкорректировать регулярку.

Ранее была вида:

preg_match_all("/<tr.*&nbsp;&nbsp;([\w\D]{3})<.*>([01]{1,7})<.*>([\d,]{7})<.*<\/tr>/sU",$raw_data,$currency_raw,PREG_SET_ORDER);

страница для парсинга - http://cbr.ru/currency_base/daily.aspx?date_req=28.05.2014

J
На сайте с 20.02.2014
Offline
120
jkm
#15
mvg:

preg_match_all("/<tr.*&nbsp;&nbsp;([\w\D]{3})<.*>([01]{1,7})<.*>([\d,]{7})<.*<\/tr>/sU",$raw_data,$currency_raw,PREG_SET_ORDER);

Исчезли &nbsp;&nbsp;

[umka]
На сайте с 25.05.2008
Offline
456
#16

mvg, вы прямо с сайта что ли тянете?

Есть же http://www.cbr.ru/scripts/XML_daily.asp

Лог в помощь!
mvg
На сайте с 16.08.2011
Offline
62
mvg
#17

[umka], да, тянется зачем-то прямо с сайта. Буду благодарен, если укажете выражение для XML

siv1987
На сайте с 02.04.2009
Offline
427
#18
mvg:
Буду благодарен, если укажете выражение для XML

http://www.php.net/manual/ru/simplexml.examples-basic.php

$xml = new SimpleXMLElement('http://www.cbr.ru/scripts/XML_daily.asp', null, true);

foreach($xml as $row){

print_r($row);

}

L1
На сайте с 21.09.2007
Offline
114
#19

Раньше тоже парсил регулярками, но после знакомства с Simple HTML DOM забыл о них.

http://xdan.ru/Uchimsya-parsit-saity-s-bibliotekoi-PHP-Simple-HTML-DOM-Parser.html

$html = str_get_html("<div>foo <b>bar</b></div>"); 

echo $html; // выведет <div>foo <b>bar</b></div>;
$e = $html->find("div", 0);
echo $e->tag; // Вернет: "div"
echo $e->outertext; // Вернет: <div>foo <b>bar</b></div>
echo $e->innertext; // Вернет: foo <b>bar</b>
echo $e->plaintext; // Вернет: foo bar


---------- Добавлено 28.05.2014 в 13:56 ----------

SEO-MAN:

<div class="class1">Цитата:<div class="class2"><blockquote>текст цитаты</blockquote></div> нужный текст</div>
</td>
class2 встречается не всегда..

На выходе preg_match хочу получить:
Цитата: текст цитаты
<br>
нужный текст

Для Вашего примера:

$html = str_get_html("...");  

$e = $html->find("div[class=class1]", 0);
echo $e->plaintext;
siv1987
На сайте с 02.04.2009
Offline
427
#20
L3n1n:
Раньше тоже парсил регулярками, но после знакомства с Simple HTML DOM забыл о них.

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий