StehtaufdemSchlauch: Perl Regexp

Hi zusammen,

ich brauch mal kurz hilfe bei einem Reg Exp, der glaub ziemlich alltäglich ist, ich aber gerade nicht drauf komme.

Mein String muss in dem folgenden Format sein ...

$string="aa"  
$string="aa,bb"  
$string="w1,sw,34,55,ls,55,d2,63"  
$string="ll,ll"  
$string="oo,22,33"

Also 2 Character gefolgt von nix oder einem Komma und dann nochmal 2 Character.

Wie kann ich das prüfen?

Soweit bin ich gedanklich :

if ($opts{s} !~ /^\w{2},{0,1}\w{2}+$/)  
{  
        exit;  
}

Was ja Käse ist, da dann auch z.B. aabb (ohne Koma) erlaubt wäre. Muss ich da mit split auf das Koma arbeiten und das dann "einzeln" prüfen? Jemand eine Idee?

  1. Mein String muss in dem folgenden Format sein ...

    $string="aa"

    $string="aa,bb"
    $string="w1,sw,34,55,ls,55,d2,63"
    $string="ll,ll"
    $string="oo,22,33"

    
    >   
    > Also 2 Character gefolgt von nix oder einem Komma und dann nochmal 2 Character.  
      
    Wenn du diesen Satz mit Klammern und Zähler ausstattest hast du schon fast die Lösung!  
      
    /^  
    #2 Character  
    \w\w  
      #gefolgt von  
      (  
       #nix  
       #oder  
      |  
       #einem Komma  
       ,  
       #und dann nochmal 2 Character.  
       \w\w  
      )  
    $/x;  
      
    
    > Soweit bin ich gedanklich :  
    > ~~~perl
    
    if ($opts{s} !~ /^\w{2},{0,1}\w{2}+$/)  
    
    > {  
    >         exit;  
    > }
    
    

    Sollte doch einfach sein
    ()* match 0 oder beliebig viele Dinge.

    Vertiefe deine Kenntnis über () und (?:)
    http://perldoc.perl.org/5.10.0/perlre.html

    /^
      \w\w
      (?:
        ,
        \w\w
      )*
    $/x;

    Spezifiziere, was \w genau beinhaltet.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Vertiefe deine Kenntnis über () und (?:)
      http://perldoc.perl.org/5.10.0/perlre.html

      /^
        \w\w
        (?:
          ,
          \w\w
        )*
      $/x;

      Danke.

      Hab ich richtig verstanden, dass ?: nur den Unterschied macht, dass es nicht in $1 gespeichert wird? Also ansonsten identisch ist zu:

      /^  
         \w\w  
         (  
           ,  
           \w\w  
         )*  
      $/x;
      
      1. Hab ich richtig verstanden, dass ?: nur den Unterschied macht, dass es nicht in $1 gespeichert wird? Also ansonsten identisch ist zu:

        (?:) gibt mehr Möglichkeiten
        /CASESENSITIVE(?-i:caseinsensitive)CASESENSITIVE/
        /.{1}(?-s:.).{1}/
        . matcht Newlines nur in der Mitte
        etc...

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische