Вам нужно регулярное выражение для этого? Не обязательно. Являются ли регулярные выражения наиболее читаемым решением? Вероятно, нет - по крайней мере, если вы не владеете регулярным выражением. Являются ли регулярные выражения более эффективными при сканировании больших объемов данных? Безусловно, регулярные выражения компилируются и кэшируются при первом появлении. Выигрывает ли регулярное выражение трофей "наименьшего количества строк кода"?
$string = <<<EOS
<html>
<body>
blahblah<br>
<img src='http://www.mysite.com/folder/subfolder/images/myimage.png'>blah<br>
blah<img src='http://www.mysite.com/folder/subfolder/images/another.png' />blah<br>
</body>
</html>
EOS;
preg_match_all("%<img .*?src=['\"](.*?)['\"]%s", $string, $matches);
$images = array_map(function ($element) { return preg_replace("%^.*/(.*)$%", 'images/$1', $element); }, $matches[1]);
print_r($images);
Две строки кода, которые трудно подрезать в PHP. В результате получается следующий массив $images
:
Array
(
[0] => images/myimage.png
[1] => images/another.png
)
Обратите внимание, что это не будет работать с версиями PHP до 5.3, если вы не замените анонимную функцию правильной.