2012-04-09 7 views
-2

Ich bin sehr schlecht bei regulären Ausdrücken und damit etwas Hilfe benötigen:PHP - Regular Expression Multiple Option Parsing

ich mehrere Optionen mit einem regulären Ausdruck in einem Inhalt finden müssen:

  1. {{ Value }} - Immer
  2. {{ Value | Value 2 }} - Optionaler zweiter Teil - | Wert 2
  3. {{ Value | Value 2(Value3) }} - Optional ist ein dritter Teil - (Value3)

Regel: Leerzeichen sind erlaubt vor oder nach dem Wert

Was ich habe ist dies, aber es funktioniert nicht für alle drei Bedürfnisse und optional :

/\{{(.*)|(.*)}}/siU 

Antwort

1
/\{{2}\s*?(.+)(?:\s*?\|\s*?(.+)\s*?(?:\(\s*?(.+)\s*?\))?)?\s*?\}{2}/isU 

Verschönern dies selbst bitte.

  • \{{2} ist eine Öffnung geschweifte Klammer (\{) genau zwei von ihnen ({2}).
  • \s*? ist ein Leerraum (\s), null oder mehr Male (*) und so viele wie möglich (? in ungreedy Modus)
  • (.+) ist jedes Zeichen (.), ein oder mehr Male (+)
  • (?:x)? ist ein Teilausdruck x, der nicht zu den Ergebnissen hinzugefügt wird (?:) und der nie oder einmal auftreten muss (nach ?). Hier wird der Teil "Wert 2" optional verwendet.
  • \s*?\|\s*? sind so viele Leerzeichen wie gefunden, ein vertikaler Balken und mehr Leerzeichen (falls gefunden).
  • Daran schließt sich ein weiterer optionaler Teilausdruck für "Wert 3" an.
  • \(\s*?(.+)\s*?\) sind eine öffnende Klammer (\(), wie viele Leerzeichen wie gefunden (\s*? wieder), der tatsächliche Gehalt (mindestens ein Zeichen, .+), mehr Leerzeichen und eine schließende Klammer.
  • \}{2} ist die schließende geschweifte Klammer, und genau zwei von ihnen auch.
0

mein Ansatz

/\{\{[\s\W]*((\w+)([\s\W]*\|[\s\W]*([\w]+)([\s\W]*\([\s\W]*(\w+)[\s\W]*\)[\s\W]*){0,1}){0,1})[\s\W]*\}\}/