seth: Reg. Ausdruck oder IF?

Beitrag lesen

gudn tach!

Der gesuchte reguläre Ausdruck (ungetestet) müsste so aussehen:
EZ {0,1}- {0,1}(Team|TEAM)

Alles klar?

Nein, ganz und gar nicht, weil - kompliziert!

ok, der reihe nach:
  EZ {0,1}- {0,1}(Team|TEAM)
  ^
ein 'E'

EZ {0,1}- {0,1}(Team|TEAM)
   ^
dann ein 'Z'

EZ {0,1}- {0,1}(Team|TEAM)
    ^^^^^^
dann ein leichzeichen, dass mind. 0 mal und hoechstens 1 mal vorkommen sollen. auf deutsch: ein leerzeichen ' ' oder keins ''.

EZ {0,1}- {0,1}(Team|TEAM)
          ^
ein bindestrich (etwas genauer: der simple bindestrich, den man mit genau einem tastendruck bei einem gewoehnlichen keyboardlayout eingeben kann; es gibt noch andere bindestriche)

EZ {0,1}- {0,1}(Team|TEAM)
           ^^^^^^
wie eben: ein leerzeichen oder keins.

EZ {0,1}- {0,1}(Team|TEAM)
                 ^^^^^^^^^^^
eine alternative (durch das pipe-zeichen '|' symbolisiert). die klammern helfen hier nur, um die alternativen einzugrenzen: also entweder 'Team' _oder_ 'TEAM'

if ($nick =~ /(EZ|ez|Ez|eZ) {0,1}- {0,1}(Team|TEAM|team|TeAm|teAm|TEam|TEAm|tEAM|TeAM|TeaM)/) {goto NamenUmfangError;}

igitt. es gibt den sogenannten i-modifier, mit dem wird die unterscheidung zwischen klein- und grossbuchstaben deaktiviert. das macht den code lesbarer:

if($nick =~ /ez {0,1}- {0,1}team/i){  
  goto NamenUmfangError;  
}

"goto" sollte man uebrigens erfahrungsgemass vermeiden, es sei denn, man geht sehr, sehr sorgfaeltig damit um, und kann begruenden, warum man nicht einfach einen funktionsaufruf oder eine schleife oder aehnliches stattdessen verwendet.

in perl kannst du uebrigens auch - wie im deutschen oder englischen - konditionalsaetze nachstellen und somit den ganzen krempel andersherum formulieren, z.b.
   goto NamenUmfangError if $nick =~ /ez {0,1}- {0,1}team/i;
um zu entscheiden, was im konkreten fall besser ist, musst du dir ueberlegen, wie du das, was da vorgeht, jemandem erklaeren wuerdest. was ist wichtiger, die bedingung oder die (bedingte) aktion? ob du's falsch gemacht hast, merkst du, wenn sich dein code liest wie jedi yoda spricht, vgl. yoda condition.

prost
seth