Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вырезать лишние теги
 
 автор: Drago   (14.05.2007 в 11:38)   письмо автору
 
 

С помощью какого регулярного выражения, можно вырезать из строки лишние теги?

К примеру, имеется строка:


<?
$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 в 13:27)   письмо автору
 
   для: 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($text0$lt);
        
$t2 substr($text$gt 1);
        
$text $t1 $t2;
        }
    return 
$text;
    }
?>

   
 
 автор: HeNuS   (23.05.2007 в 18:38)   письмо автору
 
   для: 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;

   
 
 автор: Loki   (24.05.2007 в 10:10)   письмо автору
 
   для: HeNuS   (23.05.2007 в 18:38)
 

А если в тексте встретится несколько абсолютно идентичных картинок?

   
 
 автор: HeNuS   (24.05.2007 в 12:44)   письмо автору
 
   для: 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] инвертирует действие

   
 
 автор: Trianon   (24.05.2007 в 10:42)   письмо автору
 
   для: Drago   (14.05.2007 в 13:27)
 

проще, наверное, не вырезать, а разрушать тег. <badimg src=....

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования