Prova cosi.
Codice PHP:
<?php
$contenuto = "prova messaggio di email, {nome che inserisce} è l'attributo nome, {cognome che inserisce} questo invece è l'attributo cognome e poi ci sono altri campi come {oggetto che inserisce}";
$regex = "/\{[^}]*\}/"; //prende i caratteri all'interno della parentesi graffa
preg_match_all($regex,$contenuto,$res);
print_r($res);
?>
La tua "\{[a-z]\}"; non poteva andare perchè :
- mancavano i caratteri d'inizio e di fine (per esempio /)
- [a-z] prendi i caratteri da a a z ma c'è anche lo spazio. Manca \s !!!
- [a-z] prendi un solo carattere. Manca * per dire che possono esserci da 0 a n.
Poi hai usato preg_match mentre ci vuole preg_match_all per prendere tutti i valori.
Avresti dovuto scrivere $regex = "/\{[a-z\s]*\}/";
Comunque oltre agli spazi potresti avere apici o altri segni. Quindi è più semplice dire "prendo tutto quello che non corrisponde ad una graffa" => "/\{[^}]*\}/";