$pattern = '/\{LG:(?<identifier>[\w]+)\|*(?<elements>(.*?)+)*?\}/s';
$string = '<li>{LG:TEASER_TEXT_1|Foo|<input type="button" name="fu" value="Ölapaloma" onclick="alert(\'Das ist ein \\ Test >> //\')"/>|FooBar}</li>';
preg_match_all($pattern, $string, $matches, PREG_SET_ORDER);
Auf Elements mach ich nun ein explode und dann hab ich die Teile auch schon in einem Array.
Meine Vermutung zu meinem anderen RegExp ist, dass er zwar jedes Element findet, aber das Gefundene immer wieder mit dem Nächstgefundenem im Array überschreibt. Ja - ich habe davor natürlich kein ?<elements> benutzt ;)