seth: [Regex]Vor einem Zeichen X darf kein Zeichen Y stehen

Beitrag lesen

gudn tach!

Ein Array oder Hash brauch ich nicht, Skalar reicht vollkommen. Die while-Schleife soll einfach eine Klammer nach der anderen abarbeiten und den abgearbeiteten Ausdruck durch das Ergebnis ersetzen. Im Prinzip ist dabei auch egal ob die Abfrage von vorne nach hinten oder von hinten nach vorne läuft, da  sich die Ausdrücke in der Klammern nicht gegenseitig beeinflussen.

ahaa!

dann sollte es damit funzen. (du warst bereits ganz nah dran:)

  
while($tmp=~/^  
    (.*)              # prefix = $1  
    (                 # to be extracted = $2  
      (?<!\\)\[       # opening bracket  
      (?:  
        [^\[\]]       # non-backet  
        |             # or  
        (?<=\\)[\[\]] # bracket prefixed by slash  
      )+  
      (?<!\\)\]       # closing bracket  
    )  
    (.*)              # postfix = $3  
    /x){  
  $tmp = $1.$3;  
  $execute = $2;  
}  

sollte einigermassen selbsterklaerend sein. bei komplizierteren patterns solltest du den x-modifier verwenden. dann wird whitespace ignoriert und kann fuer eine verbesserung der lesbarkeit eingesetzt werden. ausserdem ist dann konventionelles kommentieren mit # moeglich.

prost
seth