regulärer Ausdruck in php: nehmen Sie die kürzeste Partie
Ich versuche ein PHP regulärer Ausdruck, aber ich kann nicht den richtigen Weg finden ...
Vorstellen, habe ich diesen string: "Hallo, mein {{name ist Peter}} und {{ich will Schokolade Essen}}"
Möchte ich die Teile zwischen {{ und }}
Aber wenn ich preg_match("/\{\{(.*)?\}\}/", $string)
es gibt mir jut one string "{{name ist Peter}} und {{ich will Schokolade Essen}}"
Wie kann ich sagen, die ersten Zufälle des }} ?
Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
Den Ausdruck
".*"
ist gierig, so viele Zeichen wie möglich.Wenn Sie
".*?"
ist, nimmt sich so wenig Zeichen wie möglich, das heißt, es Stoppt an der ersten der schließenden Klammern.Den PCRE-Funktionen eine gierige standardmäßig. Das bedeutet, dass der Motor immer versucht, so viel Zeichen wie möglich. Die Lösung ist ganz einfach: sagen Sie ihm, zu handeln, nicht gierig mit der
U
modifierhttp://php.net/reference.pcre.pattern.modifiers
Du willst "ungreedy matching":
preg_match("/{{(.*?)?}}/", $string)
.Hinweis: die erste Frage, die mark - ein regex ist standardmäßig "gierig": angesichts mehrerer Möglichkeiten zu passen, es passt so viel text wie möglich. Hinzufügen die Fragezeichen machen es ungreedy, so gibt es mehrere Möglichkeiten, um zu passen, es passen so wenige Zeichen wie möglich.
BEARBEITET
Als non-greedy matching scheint schneller zu sein als negiert man (siehe hier), ändere ich meine Antwort auch. Dachte, es sei andersherum...
Möchten Sie vielleicht die Verwendung
preg_match_all
man alle SpieleDieser arbeitete für mich.