Regulärer Ausdruck gesucht!

Hallo Experten,
Ich programmiere schon länger PHP, doch was die PREG angeht, bin ich ein absoluter Neuling^^
Ich suche einen perl kompatiblen Regulären Ausdruck, der derartige Strings findet:
{%Text%}

Wobei Text einfach \w ist. (alphanumerische Zeichen)

Ich hoffe jemand kann helfen :wink:
Danke schon im Vorraus!

Ich programmiere schon länger PHP, doch was die PREG angeht, bin ich ein absoluter Neuling^^
Ich suche einen perl kompatiblen Regulären Ausdruck, der
derartige Strings findet:
{%Text%}

Wobei Text einfach \w ist. (alphanumerische Zeichen)

/{%\w+%}/

Zeichen wie z.B. (){}[]+*?/. müssen mit \ entwertet werden.

MfG Michael

aus irgendeinem Grund läuft da was nicht^^
Ich habe in der variable $var folgende zeichenkette:"
{%hallo%}
"

preg_replace("/{%\w+%}/", „hallooo“, $var);
echo $var;

Da wird leider gar nichts ersetzt^^
Kannst du mir sagen, welchen fehler ich mache?

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";
 }
} 

Vermutlich ein Denkfehler, was die Arbeitsweise der Funktion preg_replace angeht…

Bei mir geht es hervorragend:

<?php $var = "
{%hallo%} "; echo preg\_replace("/\{%\w+%\}/", "hallooo", $var); ?\> Der Befehl preg\_replace hat EINEN RÜCKGABEWERT! Es ändert KEINE VARIABLEN! Etwas anders ist es mit preg\_match bzw. preg\_match\_all: Dort können Ausdrücke, die in Klammen gesetzt sind, in Arrays ausgelesen werden: <?php $var = "
{%hallo%} "; if(preg\_match\_all("/\{%(\w+)%\}/", $var, $match)) print\_r($match); ?\> In $match werden die treffer angezeigt! MfG Michael Engelke

danke dir :wink:
wirklich ein grober Denkfehler
(bis jetzt habe ich immer versucht die preg Funktionen zu meiden ^^)

Danke, hat mir geholfen. Es funktioniert :wink: