Hallo,
mit diesem Problem habe ich auch schon gekämpft, es aber letztlich nicht per RegExp gelöst, sondern durch eine andere Programmlogik.
Das Problem ist natürlich, daß der reguläre Ausdruck nichts von der syntaktischen Bedeutung Deiner Tags {a} und {/a} weiß, d.h. zumindest mir ist kein Weg bekannt, wie man dem regulären Ausdruck beibringen kann, welches {/a} zu welchem {a} gehört.
Er findet also bei: /{a}.*{/a}/si
in: {a}außen {a}innen{/a} und wieder außen{/a}
nur: außen {a}innen
Vielleicht wäre aber ein anderer Ansatz denkbar:
suche nach Text, der eingeschlossen ist von {a} oder {/a} und {a} oder {/a}.
Es findet: /{/?a}[^{}]*{/?a}/si
in: {a}außen {a}innen{/a} und wieder außen{/a}
dies: außen innen und wieder außen
Das ist jetzt allerdings nicht getestet, sondern eher aus dem Stegreif dahin"gejammt".
Ein Schwachpunkt ist z.B., daß im Fließtext zwischen den Tags {a} und {/a} kein '{' und kein '}' vorkommen dürfen.
Aber vielleicht hilft Dir dieser Ansatz ja.
Ciao,
Andreas