La regexp di bubi1 non va bene perche' e' vero che il ? rende i quantifier non-greedy, ma e' anche vero che le regexp matchano sempre prima da sinistra, quindi avendo questa stringa:
codice:
[img]../images/load.gif[/img][img]folderx/folder-y/img-z.jpg[/img]
il pattern matcha perche' trova l'id corretto, pero' prende il primo src che trova (cioe' quello della prima immagine).
Io farei cosi': prima estraggo tutte le immagini, poi filtro quelle con l'id corretto e infine da queste ultime estraggo l'src
codice:
$stringa = '
[img]../images/load.gif[/img]
[img]folderx/folder-y/img-z.jpg[/img]
[img]folderx/folder-XXX/img-z.jpg[/img]
[img]../images/load.gif[/img]
[img]folderx/folder-YYY/img-z.jpg[/img]
';
preg_match_all('#<img.*?>#', $stringa, $images);
foreach (preg_grep('/id="orderimg"/', $images[0]) as $match) {
preg_match('/src="(.*?)"/', $match, $src);
echo $src[1], "\n";
}
Comunquee usare le regexp per lavorare sull'HTML e' sempre abbastanza "tricky". Va bene finche' sei sicuro di come e' fatto il testo in input, altrimenti se devi considerare OGNI possibile porcheria diventa necessario usare un vero parser. Ad esempio, basta aggiungere un title="foo>bar" nel posto sbagliato e il primo pattern puo' fallire.