Ich versuche, einen regulären PHP-Ausdruck zu machen, aber ich kann den richtigen Weg nicht finden ...
Stellen Sie sich vor, ich hätte diese Zeichenfolge: "Hallo, mein {{Name ist Peter}} und {{Ich möchte Schokolade essen}}"
Ich möchte die Teile zwischen {{und}}
nehmen Aber wenn ich preg_match("/\{\{(.*)?\}\}/", $string)
es gibt mir jut einen String zurück "{{Name ist Peter}} und {{Ich möchte Schokolade essen}}"
Wie kann ich sagen, die ersten Zufälle von}} zu nehmen?
Danke
Das PCRE funktioniert standardmäßig gierig. Das bedeutet, dass die Engine immer versucht, so viele Zeichen wie möglich zu finden. Die Lösung ist einfach: Sag ihm einfach, dass er mit dem Modifikator " U
" nicht gierig handeln soll
%Vor%
Sie möchten "nicht gierige Übereinstimmung": preg_match("/{{(.*?)?}}/", $string)
.
Beachten Sie das erste Fragezeichen - eine Regex ist standardmäßig "gierig": Wenn mehrere Möglichkeiten gefunden werden, passt es so viel Text wie möglich an. Durch das Hinzufügen des Fragezeichens wird es nicht gierig. Wenn es mehrere Übereinstimmungen gibt, passt es so wenig Zeichen wie möglich an.
BEARBEITET
Nicht-gieriges Matching scheint schneller zu sein als negiertes ( siehe hier ), ändere ich auch meine Antwort. Ich dachte, es wäre anders herum ...
%Vor% Sie können preg_match_all
verwenden, um alle Treffer zu erhalten