Разделите теги, но сохраните первый

Как я могу сохранить, например, первый тег img но удалить все остальные?

(из строки HTML)

пример:

 <p> some text <img src="aimage.jpg" alt="desc" width="320" height="200" /> <img src="aimagethatneedstoberemoved.jpg" ... /> </p> 

так что это должно быть просто:

 <p> some text <img src="aimage.jpg" alt="desc" width="320" height="200" /> </p> 

Функция из этого примера может использоваться для хранения первых N IMG-тегов и удаляет все остальные <img> s.

 // Function to keep first $nrimg IMG tags in $str, and strip all the other <img>s // From: http://coursesweb.net/php-mysql/ function keepNrImgs($nrimg, $str) { // gets an array with al <img> tags from $str if(preg_match_all('/(\<img[^\>]+\>)/i', $str, $mt)) { // gets array with the <img>s that must be stripped ($nrimg+), and removes them $remove_img = array_slice($mt[1], $nrimg); $str = str_ireplace($remove_img, '', $str); } return $str; } // Test, keeps the first two IMG tags in $str $str = 'First img: <img src="img1.jpg" alt="img 1" width="30" />, second image: <img src="img_2.jpg" alt="img 2" width="30">, another Img tag <img src="img3.jpg" alt="img 3" width="30" />, etc.'; $str = keepNrImgs(2, $str); echo $str; /* Output: First img: <img src="img1.jpg" alt="img 1" width="30" />, second image: <img src="img_2.jpg" alt="img 2" width="30">, another Img tag , ... etc. */ 

Вы могли бы выполнить это с помощью сложной строки регулярных выражений, однако мое предложение было бы использовать preg_replace_callback, особенно если вы находитесь на php 5.3+ и вот почему. http://www.php.net/manual/en/function.preg-replace-callback.php

 $tagTracking = array(); preg_replace_callback('/<[^<]+?(>|/>)/', function($match) use($tagTracking) { // your code to track tags here, and apply as you desire. });