Hast Du ihn mal getestet?
Dein $pattern hat mir folgenden Fehler ausgespuckt: Unmatched parentheses
[A-Za-z0-9]+ hört sich nicht so an als würde es auf viel html matchen.
Ja - ich hatte den Such-String in der Zeit schon mehrfach wieder verändert.
Aktuelles Probebeispiel:
$string = '<li>{LG:TEASER_TEXT_1|Das ist ein Test|12:42:31|5|˙·٠•● FooBar ●•٠·˙}</li>'
$pattern = '/\{LG:(?<identifier>[\w]+)\|?(?<elements>.*?)?\}/s';
$count = preg_match_all($pattern, $string, $matches, PREG_SET_ORDER);
var_dump('<pre>', $matches, '</pre>');
Das Vardump gibt da aus:
array(5) {
[0]=>
string(79) "{LG:TEASER_TEXT_1|Das ist ein Test|12:42:31|5|˙·٠•● FooBar ●•٠·˙}"
["identifier"]=>
string(13) "TEASER_TEXT_1"
[1]=>
string(13) "TEASER_TEXT_1"
["elements"]=>
string(60) "Das ist ein Test|12:42:31|5|˙·٠•● FooBar ●•٠·˙"
[2]=>
string(60) "Das ist ein Test|12:42:31|5|˙·٠•● FooBar ●•٠·˙"
}
Jetzt kann ich auf elements ein explode machen und bin schon mal einen Schritt weiter.
Meine vorigen $pattern haben einfach nicht funktioniert. Ich denke das dort schon jedes der '|foo_bar' Elemente rausgefiltert wurde, nur hat das neustgefundene das letzte im Array überschrieben.
In der Datenbank steht jetzt als identifier: TEASER_TEXT_1
Und TEASER_TEXT_1 hat zum Beispiel den deutschsprachigen Wert:
"Was haben wir denn hier: %1 um %2 und es wurde %3 von %4 geändert."
Dabei soll dann später folgend ersetzt werden:
%1 - Das ist ein Test
%2 - 12:42:31
%3 - 5
%4 - ˙·٠•● FooBar ●•٠·˙
Aber das sind dann extra Funktionen. Ich wollte nur deutlich machen wofür ich das Brauche. Sprich ist das erste hinter {LG: ein Platzhalter für einen Text, welcher auch Platzhalter enthalten kann, welche dann aber mit %1 gekennzeichnet sind und die später dann mit den Elementen hinter dem ersten Trenner '|' liegen.
Ich weiß nicht wie ich es besser beschreiben kann.