REGEX (REGular EXpression => Regulärer Ausdruck)

Die „Basic REGEX“ sind recht einfach, allerdings fehlen ihnen einige wichtige Funktionen. Deshalb wurden die REGEX zu den „Extended REGEX“ erweitert. Allerdings haben viele Softwarehersteller ihre eigenen erweiterten REGEX-Versionen veröffentlicht, bevor die „Extended REGEX“ veröffentlicht wurden. Und so kam es, dass es zur Zeit viele verschiedene erweiterten REGEX-Versionen gibt, die bekannteste ist die „Perl-REGEX“-Version, die meiner Meinung nach auch recht gut gelungen ist.

basic regular expressions (BRE)

Das ist die grundlegende Version der POSIX-REGEX.

Diese REGEX wird von „grep“ unterstützt.

extended regular expressions (ERE)

Das ist die erweiterte Version der POSIX-REGEX.

Diese REGEX wird von „egrep“ unterstützt.

egrep ist das gleiche wie grep -E

genau ein Buchstabe oder eine Ziffer:

[[:alnum:]]
[0-9A-Za-z]

genau ein Buchstabe:

[[:alpha:]]

genau ein kleiner Buchstabe:

[[:lower:]]

genau ein großer Buchstabe:

[[:upper:]]

genau eine Ziffer:

[[:digit:]]

genau ein Hexadezimalziffer:

[[:xdigit:]]

genau ein sichtbares Zeichen:

[[:graph:]]

genau ein druckbares Zeichen:

[[:print:]]

genau ein Punkt, Komma oder Semikolon:

[[:punct:]]

genau ein Leerzeichen oder Tabulatorzeichen (white space):

[[:space:]]
[ \t]

genau ein Steuerzeichen:

[[:cntrl:]]

genau ein Leerzeichen:

[ ]

genau ein Tabulatorzeichen:

[\t]

genau ein Zeilenumbruch:

[\n]

genau ein Seitenvorschub:

[\f]

genau ein Wagenrücklauf (^M):

[\r]

genau ein beliebiges Zeichen:

.

mindestens ein beliebiges Zeichen:

.+

ein oder kein beliebiges Zeichen:

.*

genau ein Punkt:

[.]

mindestens ein Punkt:

[.]+

ein oder kein Punkt:

[.]*

genau ein Leerzeichen:

[ ]

mindestens ein Leerzeichen:

[ ]+

ein oder kein Leerzeichen:

[ ]*

genau einmal irgendein Zeichen, nur kein “/“:

[^/]

mindestens einmal irgendein Zeichen, nur kein “/“:

[^/]+

ein oder keinmal irgendein Zeichen, nur kein “/“ (diese REGEX ist aber Blödsinn ⇒ doppelte Negation):

[^/]*

sed

Leider verwendet sed noch eine andere REGEX-Form, hier ein paar Besonderheiten:

genau ein beliebiges Zeichen:

.

mindestens ein beliebiges Zeichen:

.\+

ein oder kein beliebiges Zeichen:

.*

genau ein Punkt:

[.]

mindestens ein Punkt:

[.]\+

ein oder kein Punkt:

[.]*

genau ein Leerzeichen oder Tabulator (white space):

[ \t]

mindestens ein Leerzeichen oder Tabulator (white space):

[ \t]\+

ein oder kein Leerzeichen oder Tabulator (white space):

[ \t]*

kein Leerzeichen oder Tabulator (white space) am Zeilenanfang:

^\s\+

kein “/“ am Zeilenanfang:

^[^/]\+

Hierbei ist zu beachten, dass das “+“ als „Mengenangabe“ maskiert werden muss, der „*“ dagegen nicht!

Perl Compatible Regular Expressions (PCRE)

hier ein Beispiel für ein Match:

kein Match

# perl -0ne 'print "$ARGV\n" if m/Nameserver/' /etc/resolv.conf

ein Match

# perl -0ne 'print "$ARGV\n" if m/nameserver/' /etc/resolv.conf
/etc/resolv.conf

hier ein Beispiel für ein UND-verknüpften Match:

kein Match

# perl -0ne 'print "$ARGV\n" if m/nameserver/ && m/10.10.2.20/' /etc/resolv.conf

ein Match

# perl -0ne 'print "$ARGV\n" if m/nameserver/ && m/10.10.2.10/' /etc/resolv.conf

/etc/resolv.conf

In Perl werden reguläre Ausdrücke auf mannigfache Weise benutzt. Die einfachste Möglichkeit ist, zu prüfen, ob der Text in einer bestimmten Variablen auf einen regulären Ausdruck paßt. Das folgende Programmstück prüft den String in der Variable $reply und gibt aus, ob darin nur Ziffern vorkommen:

#!/usr/local/bin/perl -w
$var = "0123456789";
if ( $var =~ m/^[0-9]+$/ )
{
        print "$var sind alles nur Ziffern\n";
} else
{
        print "$var sind nicht nur Ziffern\n";
}

Soll nicht nur der erste Treffer modifiziert werden, dann muss am Ende der REGEX ein „g“ für global angehängt werden: „m/^[0-9]+$/“ wird zu „m/^[0-9]+$/g“

Wenn die Regex wahr ist, dann wird der Teil des Strings in $var, der auf den regulären Ausdruck gepaßt hat, durch Ersatz ersetzt.

#!/usr/local/bin/perl -w
$var = "Jeff";
if ( $var =~ s/Jeff/Jeffrey/ )
{
        print "$var wurde ersätzt\n";
} else
{
        print "$var wurde nicht ersätzt\n";
}

Soll nicht zwischen Groß- und Kleinschreibung unterschieden werden, dann muss man am Ende der REGEX ein „i“ hängen: „s/Jeff/Jeffrey/“ wird zu „s/Jeff/Jeffrey/i“

Parameter bzw. Argumente übergeben

Will man auf der Kommandozeile Parameter übergeben, dann wird das erste im Perl-Script z.B. mit $var = „$ARGV[0]“; in der Variable $var abgelegt.

Oniguruma regular expressions

Bisher war PCRE die am weitesten verbreitete RegEx-Variante, mittlerweile gewinnt aber eine neue Version immer mehr an Popularität: Oniguruma

Oniguruma ist ist eine RegEx-Bibliothek, die unter der BSD-Lizenz steht, sie unterstützt ein sehr großes Spektrum an Zeichensätzen, darunter auch UTF-8.

Sie wird in der Interpretersprache Ruby seit der Version 1.9 eingesetzt und in der Interpretersprache PHP5. Seit der Version 7.7 verwendet sogar PCRE ein Oniguruma-Konstrukt für Subroutinen.

Es wird ebenso in Produkten wie Tera Term, TextMate und SubEthaEdit eingesetzt.

 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki