2012-03-25 5 views
0

Ich versuche, alle Tags in einer Datei wie {{name:something}} zu bestimmten Werten zu ersetzen. Beachten Sie, dass in {{name::something}} nur etwas könnte Warry. Wie {{name:title}} oder {{name:content}}. Dieser "Name" wird immer da sein.php Pattern Matching für benutzerdefinierte Tags

Wie auch immer, Ich habe preg_match_all und preg_replace, es hat alles geklappt. Ich fand die Spiele mit diesem regulären Ausdruck: $patmatch="/{{name:[a-zA-Z0-9._-]+}}/";

Mein Problem ist folgendes:

Wenn ein Tag wie folgt dem Muster nicht übereinstimmen (es hat einen Syntaxfehler), wie {{notname:something}} oder {{name something}} oder {{ }} Ich muss eine Ausnahme werfen. Woher weiß ich, ob der Tag da ist, aber mit einem Syntaxfehler?

Kann ich irgendwie ein anderes Muster Suche machen zu überprüfen, ob es ein Tag ist (zwischen {{ und }}), und wenn es {{name:something}} nicht wie das?

Jede Hilfe wäre willkommen, Vielen Dank!

Antwort

1

Aus der Spitze von meinem Kopf:

if(strpos($text, '{{name:') === false) 
{ 
    //exception 
} 
else 
{ 
    //properly formatted text 
} 

So etwas wie das?

+0

Nun, fast. Sie sehen, die preg_match_all() Funktion wird mir nur die richtigen Treffer bringen. Die richtig formatierten Texte. Aber ich muss auch die falschen finden und eine Ausnahme auslösen, wenn ich welche finde. – Darksody

+0

Vielen Dank, ich habe das Problem mit NFLineastidee gelöst. Ich preg_match_all() nur auf jedem $ patmatch = "/ {{a-zA-Z0-9.:_-]+}}/"; (im Grunde alle {{}}) und dann überprüfe ich einfach, ob (strpos ($ text, '{{name:') === false) wie NFLineast sagte. Danke nochmal, alle deine Lösungen sind gut, ich werde die anderen auch versuchen, denke ich :) Darksody. – Darksody

+0

Ausgezeichnet. strpos() ist auch weniger ressourcenhungrig als preg_match() ... :) – NFLineast

1

Andere Antworten nur überprüfen, ob der Tag innerhalb Inhalts ist, dieser prüft, ob wahre Gültigkeit:

Unter der Annahme, dass Sie $ content Variable haben, die Inhalte der Datei enthält, können Sie vorübergehend Validierungsdaten speichern, die wie das sein werden :

$validation = preg_replace("/{{name:[a-zA-Z0-9._-]+}}/","",$content); 

So haben Sie cotents gültige Tags abgezogen und nun wollen Sie für ungültigen Tag aussehen, je nachdem, wie streng Sie es möchten, können Sie eine von theese verwenden:

if(preg_match('/{{name:[^}]*}}/', $validation)) //found error tag 
//alternatively you might want to check for typos like "nmae": 
if(preg_match('/{{[^}]*}}/', $validation)) //found error tag 
0

Vielleicht können Sie etwas wie Untermuster verwenden, benennen und überprüfen Sie das Ergebnis