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

12
_S_
На сайте с 12.01.2006
Offline
109
_S_
916

Есть такой html-код

<div class="text">
<span style="color:#777;">текст1</span>
<span>Тек<b>к</b> <b>с</b>, т который сюда попада</b> <b>ет</b>, тоже</span>
</div>

Нужно, чтобы текст1 - не выводился;

А текст, очищался от тегов, до закрывающего див.

Тегов спан и <b> может быть любое количество.

Можно ли это осуществить через регулярные выражения, а если можно, то как?

Читаешь блог? () Сайт о холодном оружии (http://bladeist.ru)
BrokenBrake
На сайте с 03.03.2007
Offline
194
#1

Конечно можно. А очищать от тэгов лучше с помощью strip_tags, это правильнее будет.

_S_:
Нужно, чтобы текст1 - не выводился;

Мне кажется, должно получиться примерно так:

$quote = preg_replace('/<span[^>]*777[^>]*>[^<]*<.span>/si','',$quote);

В переменной $quote ваш текст.

_S_
На сайте с 12.01.2006
Offline
109
_S_
#2

BrokenBrake, Получилась такая штука:

//Получаем страницу, чистим;

$allowed_tags = "<div>";

echo strip_tags($results, $allowed_tags);

$results = eregi_replace("\r", '', $results);

$results = eregi_replace("\n", '', $results);

preg_match_all("/<div class=\"text\">(.*) <\/div>/", $results, $fst);

$htm1='';

foreach($fst[1] as $nam=>$val){

$htm1=$htm1 .$fst[1][$nam];

}

print $htm1;

А в ответ пустота :(

BrokenBrake
На сайте с 03.03.2007
Offline
194
#3

_S_, я вообще не очень в PHP разбираюсь, но в таких случаях делаю поэтапно строчка за строчкой. И php.net в помощь, конечно же.

В вашем коде у меня вызывают удивление, в частности, echo во второй строчке, двойное eregi_replace тоже странная штука, зачем? В общем, какой-то странный код, на мой дилетантский взгляд :)

_S_
На сайте с 12.01.2006
Offline
109
_S_
#4

BrokenBrake, Сам дилетант похлеще, но жизнь заставляет разбираться.

еcho - для прверки вывода )

Переделал так, все заработало, сенкс за помощь )

$results = eregi_replace("\r", '', $results);

$results = eregi_replace("\n", '', $results);

preg_match_all("/<div class=\"text\">(.*)\<\/div>/Ui", $results, $fst);

$htm1='';

foreach($fst[1] as $nam=>$val){

$htm1=$htm1 .$fst[1][$nam];

}

$allowed_tags = "<div>";

echo strip_tags($htm1, $allowed_tags);

SZ
На сайте с 17.08.2005
Offline
63
#5

preg_match_all('#<div class="text">..<span style="color:.777;">(.+?)</span>..(.+?)..</div>#is', $text, $find, PREG_SET_ORDER);

foreach ($find as $key => $value)
{
$anch[$key]=explode("\r\n", strip_tags($value[2]));
}
print_r($anch);

=)

_S_
На сайте с 12.01.2006
Offline
109
_S_
#6

SergoZD, Попробовал твой код:

Notice: Undefined variable: anch in z:\home\t\www\g\g2.php on line 57

[Денвер: показать возможную причину ошибки]

:)

SZ
На сайте с 17.08.2005
Offline
63
#7

Ага, на выдаче не оттестировал просто, убегать надо было.

Если через fgets брать, то перевод строки не двумя точками, а одной заменяется. Ну а "Undefined variable" - это если ни одного нпса не найдется, проверкой на sizeof($find) обходится.

H
На сайте с 21.12.2007
Offline
24
#8

а где брать регулярные выражения для определённых целей ?

Spec123
На сайте с 21.07.2007
Offline
79
#9
hrenoid:
а где брать регулярные выражения для определённых целей ?

тут наверное

http://www.phpfaq.ru/regexp

"СПРАВЕДЛИВОСТИ НЕТ, ЕСТЬ ТОЛЬКО Я" Терри Пратчетт. Плоский мир. Афоризмы (http://tatsel.ru/diskworld/)
M
На сайте с 06.07.2007
Offline
77
#10
Spec123:
тут наверное
http://www.phpfaq.ru/regexp

почитал - это слишком громоздкое описаньеце.

Для меня регулярные выражения - тоже затруднительны.

Нужно что более понятное, где много примеров и расписаны все шаблоны детельно - где что в регулярном выражение обозначает.

было бы интересно почитать.

Продвижение сайтов в США, пишите в личку
12

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