webboxxx
на php прям совсем в одну строку не получится наверное. я бы посоветовал использвать XPath для выборки нужных элементов. это, если не в курсе, язык запросов для выборки элементов из XML/HTML документов. очень удобная штука, вроде регулярок для текста. сам правда именно в php ее не использовал, но вот навскидку пара ссылок с примерами:
http://www.tuxradar.com/practicalphp/12/3/3
http://php.net/manual/en/function.simplexml-load-file.php
для твоих примеров выражения XPath могут быть например такими:
чтобы выбрать второй тег <p>:
(//p)[2]
получить все ссылки внутри дива с классом abc:
//div[@class='abc']/a
получить все картинки где в атрибуте href есть .jpg:
//img[contains(@src,'.jpg')]
ну и т.д., получить только четные элементы там тоже есть возможность, навскидку только не помню.
хороший список примеров по XPath:
http://www.zvon.org/xxl/XPathTutorial/General_rus/examples.html
FXIX
ну алгоритм такой.
выбираешь все картинки в массив. далее в цикле прогоняешь оборачивание в ссылку. внутри цикла первой строкой делаешь проверку на парент==<a>.
<цикл>
if(img->parent()==a) {continue;}
тут код оборачивающий картинку;
</цикл>