Patrick Andrieu: Reguläre Ausdrücke

Beitrag lesen

Hallo Bautz!

Lass mich erstmal Deinen Schreibstil anmeckern, ja? ;)

Bei kurzen Anweisungen kann man einen Block sicher in einer Zeile schreiben:

if (...) { tuwas(); }

Wenn du aber einrückst, dann bitte der schließenden Klammer des Blocks auch eine eigene Zeile gönnen:

if (....) {  
  $regel = ".[°^!\"§\$%&\/()[\]{}=?\\`´*+~'#<>;,:._-]."  
}

Ich habe zunächst gedacht, diese letzte »}« gehört noch zum RegExp! Ein Semikolon ist nicht notwendig, wenn ein Block eine einzige Anweisung enthält, ich setzte jedoch immer einen, denn vielleicht will ich später das Programm überarbeiten und weitere Anweisungen hinzufügen?

if (....) {  
  $regel = ".[°^!\"§\$%&\/()[\]{}=?\\`´*+~'#<>;,:._-].";  
}

So, nun zum RegExp-Problem. Zunächst fehlt in Deinem else-Zweig die schließende Klammer »]« der Klasse:

else {  
  $regel = ".[°^!\"§\$%&\/()[\]{}=?\\`´*+~'."  
                                         # ^ hier gehört ] vor dem Punkt hin  
}

Ferner hat Perl wunderbare Operatoren, siehe perldoc perlop:

--------------------
  Quote and Quote-like Operators
    While we usually think of quotes as literal values, in Perl they
    function as operators, providing various kinds of interpolating and
    pattern matching capabilities. Perl provides customary quote characters
    for these behaviors, but also provides a way for you to choose your
    quote character for any of them. In the following table, a "{}"
    represents any pair of delimiters you choose.

Customary  Generic        Meaning        Interpolates
            ''       q{}          Literal             no
            ""      qq{}          Literal             yes
            ``      qx{}          Command             yes*
                    qw{}         Word list            no
            //       m{}       Pattern match          yes*
                    qr{}          Pattern             yes*
                     s{}{}      Substitution          yes*
                    tr{}{}    Transliteration         no (but see below)
            <<EOF                 here-doc            yes*

* unless the delimiter is ''.
--------------------

In diesem Fall bietet sich qr (steht für quoted RegExp) an:

$regel = qr/pattern/;

Immer drauf achten, dass gewählte Delimiter maskiert werden, falls sie im Pattern vorkommen!

Viele Grüße aus Frankfurt/Main,
Patrick

--

_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?