Beat: [RegExp] Inhalt zwischen {...} matchen

Beitrag lesen

val_x = { Wert X, {Wert.1, Wert.2}, Wert Y, {Wert.1, Wert.2}, Wert Z}
oder
  val_y = { Wert X, nil, Wert Y, {Wert.1, Wert.2}}

Ich möchte nun gerne den gesamten Inhalt zwischen der ersten öffnenden Klammer '{' und der letzten schließenden Klammer '}' matchen, wobei die Anzahl der dazwischenliegenden Klammern-Paare variabel ist.

Frage: Wie mache ich das am besten, bzw. geht das überhaupt, oder muss ich mehrere Schritte machen?

Perlansatz

  
my $outerpar = qr/[a-z]+/;  
my $innerpar = qr/[A-Za-z\ ]+/;  
my $innerval = qr/(?:nil|\([^()]+\))/;  
  
my $string =~ m/  
   $outerpar  
   \s*  
   =  
   \s*  
   \(  
   (  
      $innerpar  
      , \s*  
      $innerval  
      (?:  
        , \s*  
        $innerpar  
        , \s*  
        $innerval  
      )*  
   )  
   \)  
   /x;  
  
# komprimiert:  
my $string =~ m/$outerpar\s*=\s*\(($innerpar,\s*$innerval(?:,\s*$innerpar,\s*$innerval)*)\)/;  

Ungetestet.
Konversion nach PHP als deine eigene Übung.

mfg Beat

--
Woran ich arbeite:
X-Torah
   <°)))o><                      ><o(((°>o