|
|
|
| С помощью какого регулярного выражения, можно вырезать из строки лишние теги?
К примеру, имеется строка:
<?
$str = "Это <img alt=1>пример стро<img alt=2>ки из которой<img alt=3><img alt=4>
необходимо вырезать опре<img alt=5> <img alt=6>деленные лишние теги <img alt=7>";
?>
|
И из нее нужно вырезать все теги <img>, кроме первых пяти.
Подскажите, каким образом? | |
|
|
|
|
|
|
|
для: Drago
(14.05.2007 в 11:38)
| | Помучался с составлением регулярного выражения, плюнул и написал простенькую функцию. :)
<?
function smiledelete ($text, $num)
{
$allnum = substr_count($text, "<img");
for ($i=0; $i<$allnum-$num; $i++)
{
$gt = strrpos($text, ">");
$lt = strrpos($text, "<img");
$t1 = substr($text, 0, $lt);
$t2 = substr($text, $gt + 1);
$text = $t1 . $t2;
}
return $text;
}
?>
|
| |
|
|
|
|
|
|
|
для: Drago
(14.05.2007 в 13:27)
| | я делаю так -
$str = "Это <img alt=1>пример стро<img alt=2>ки из которой<img alt=3><img alt=4>
необходимо вырезать опре<img alt=5> <img alt=6>деленные лишние теги <img alt=7>";
$count=5;
$img=preg_match_all("|<img([^<]+)>|is",$str,$out); // вырезаю все нужные мне куски
$img=array_chunk($out[0], $count); // из получившегося массива вырезаю нужное мне кол-во элементов
$str = str_replace($img[0], "", $str); // и скармливаю этот массив элементов str_replace
print $str;
|
| |
|
|
|
|
|
|
|
для: HeNuS
(23.05.2007 в 18:38)
| | А если в тексте встретится несколько абсолютно идентичных картинок? | |
|
|
|
|
|
|
|
для: Loki
(24.05.2007 в 10:10)
| | я в коде немного облажался - строка
$str = str_replace($img[0], "", $str); // и скармливаю этот массив элементов str_replace
|
заменяет ВСЕ вхождения первых пяти тегов
но если заменить в ней $img[0] на $img[1] -
вырежутся ВСЕ теги, КРОМЕ первых пяти - что соответствует вопросу.
>А если в тексте встретится несколько абсолютно идентичных картинок?
то так -
$str = "Это <img alt=1>пример стро<img alt=2>ки из которой<img alt=3><img alt=4>
необходимо вырезать опре<img alt=5> <img alt=6>деленные лишние теги <img alt=7> а вот еще лишние <img alt=1> и вот <img alt=2>";
function preg_quote_arr (&$item,$key) {$item="/".preg_quote($item,'/')."/";}
$count=5;
$img=preg_match_all("|<img([^<]+)>|is",$str,$out); // вырезаю все нужные мне куски
$img=array_chunk($out[0], $count); // из получившегося массива вырезаю нужное мне кол-во элементов
array_walk($img[0],"preg_quote_arr");
$str = preg_replace($img[0], "", $str, 1); // и скармливаю этот массив элементов str_replace
print $str;
|
и опять таки, замена $img[0] на $img[1] инвертирует действие | |
|
|
|
|
|
|
|
для: Drago
(14.05.2007 в 13:27)
| | проще, наверное, не вырезать, а разрушать тег. <badimg src=.... | |
|
|
|