Seite 1 von 1

PHP: Reguläre Ausdrücke

Verfasst: 09.09.2007 22:28
von Gast210225
Hallo,

ich habe im moment ein kleines Problem mir regulären ausdrücken-... hier das Beispiel:

Code: Alles auswählen

$string = 'Ein String... {VARIABLE_1} und {VARIABLE_2} usw...';
preg_match_all('/{(.*)}/i', $string, $results);
var_dump($results);
dabei kommt folgendes raus:

Code: Alles auswählen

array(2)
{
    [0]=>
        array(1)
        {
            [0]=> string(29) "{VARIABLE_1} und {VARIABLE_2}"
        }
    [1]=>
        array(1)
        {
            [0]=> string(27) "VARIABLE_1} und {VARIABLE_2"
        }
}
Ich will aber dass dabei "{VARIABLE_1}" und "{VARIABLE_2}" rauskommt.
Wisst ihr wie ich das machen kann?

Verfasst: 09.09.2007 22:52
von fanrpg
Im Prinzip sollte das richtig sein, aber vllt. mal { und } maskieren? Weil soweit ich weiss gehören die mit zum Regexsyntax.

Verfasst: 09.09.2007 23:04
von Gast210225
Hallo,
wie maskiert man die {?
so?

Code: Alles auswählen

preg_match_all('/\{(.*)\}/i', $string, $results);
Weil das habe ich gerade probiert und das geht nicht... immernoch das selbe ergebniss....
Hat sonst noch jemand eine Idee?

Verfasst: 10.09.2007 00:36
von gn#36
Da ist ein logischer Fehler drin. Der Ausdruck .* ist "gierig", d.h. er nimmt so viel er kriegen kann. Diese Gier lässt sich mit einem ? beheben:

Code: Alles auswählen

preg_match_all('/\{(.*?)\}/i', $string, $results);
Alternativ könntest du auch verbieten, dass in dem inneren Text schließende Klammern vorkommen:

Code: Alles auswählen

preg_match_all('/\{([^\}]*)\}/i', $string, $results);
Die geschweiften Klammern werden übrigens zur Angabe der Häufigkeit von best. Ausdrücken verwendet.

q{2} bedeutet beispielsweise dass an dieser Stelle genau 2 mal ein q stehen muss (also qq).

Verfasst: 10.09.2007 11:15
von Gast210225
Hallo,

danke, genau das habe ich gesucht :)