Я бы предложил
preg_match_all("~\{(area-[0-9]*)\}(.*?)\{/\1\}~s", $mystring, $matches);
Это будет работать, даже если другие теги вложены в тег area
, который вы просматриваете.
Если у вас есть несколько тегов area
, вложенных друг в друга, он все равно будет работать, но вам нужно будет применить регулярное выражение несколько раз (один раз для каждого уровня вложенности).
И, конечно, содержимое матчей будет в $matches[2]
, а не $matches[1]
, как в ответе Тату.