Saturday, February 05, 2011

x-Modifier bei Regulären Ausdrücken

Über Perl liest man häufiger, dass es eine "write-only" Sprache sei. Als Beispiel folgt dann meist ein Regulärer Ausdruck.

Auch gestern war es wieder soweit:

definitely a write-only language: can't understand A THING of the code I wrote few weeks ago if($_ =~ /^\d*\s([^\s]*)\s(.)/){ }
Erstens hat das Verständnis von Regulären Ausdruck nicht wirklich viel mit Perl zu tun. Die gibt's in (fast) jeder Sprache. In Java wäre es wohl noch kryptischer:

if ( string.matches( "\\d*\\s([^\\s]*)\\s(.)" ) ) { }
Na, wer bemerkt die doppelten "\\"? Aber darum geht's hier nicht. Zweitens kann man in Perl den x-Modifier verwenden. Damit verlieren Leerzeichen in Regulären Ausdrücken ihre Bedeutung und mit "#" kann man Kommentare in Regulären Ausdrücken anfangen:

if ( $plz_ort =~ /
^
\d{5} # Postleitzahl
\s+ # mindestens 1 Leerzeichen
[A-Za-zäöüß-] # Ortsnamen
$
/x ) { }

Damit kann man seine Regulären Ausdrücke wunderbar dokumentieren und versteht somit auch komplexere Ausdrücke auch noch nach Jahren...

Ich kann es nur empfehlen, diesen Modifier zu verwenden.

Gibt es diesen Modifier auch in anderen Sprachen?

Auf jeden Fall kann man so in Perl auch mit komplexen Regulären Ausdrücken sauber und lesbar programmieren.

No comments: