Hier mal das ganze in Perl inkl. einiger Testfälle. Sieht in PHP bestimmt sehr ähnlich aus, ich selbst kann weder Perl noch PHP, kenne mich lediglich mit Regex gut aus.
P.S.: Solltest Du mehrere Treffer in einer Zeile finden wollen, wird es etwas komplizierter, aber nicht wirklich schlimm. Du wolltest ja nur das Muster haben.
@test\_cases = (
# match
"Hello {%Text123text%} World", "{%x%}", "{%5%}", "###{%bla%}###", "\*\*\*{%one\_two%}\*\*\*",
# no match
"Hello world", "foobar", "{%%}", "{%one two%}", "{%missing\_percent}"
);
foreach $test\_case (@test\_cases) {
print "$test\_case --\> ";
if ($test\_case =~ /({%\w+%})/) {
print "match --\> $1\n";
} else {
print "no match\n";
}
}