regulaere Ausdruecke

2001-01-2 | 2:54 pm | Kein Kommentar »

if ($irgendwas =~/…/){…}

+ = {1,}
? = {0,1}
* = {0,}
mindestens eins
hoechtens eins
bel. viele, auch keins
^
$
Suche am Anfang des Audrucks
Suche am Ende des Audrucks
$irgendwas = „christine“;
if ($irgendwas =~/ris/)
if ($irgendwas =~/ine$/)
if ($irgendwas =~/^ris/)
Auswertung des Ausdrucks ergibt:
true, d.h. wird gefunden
true, d.h. wird gefunden
false, d.h. wird nicht gefunden
.
/.*/
irgendein beliebiges Zeichen
beliebig oft ein bel. Zeichen (auch null-mal)
/^.*$/
/^$/
/^\s*$/
irgendetwas, auch Leerzeile
Leerzeile
Leerzeile
\d = [0-9]
\d\d = \d{2}
\d{0,2}
eine Ziffer
zwei Ziffern hintereinander
hoechstens zwei, aber auch keine Ziffer
\s
\S
whitespaces
nicht-whitespaces
[aeiou]+
[^aeiou]+
Vokale
Nicht-Vokale
[a-kw-z]
[0-9]
Bereiche
[„_,:]
[\.\-\\]
ohne Sonderbedeutung
Escape bei Zeichen mit Sonderbedeutung
$irgendwas = „Hallo„;
if ($irgendwas =~/< .*?>/) # findet <bla>
if ($irgendwas =~/< [^>]+>/) # findet ebenfalls <bla>

Klammerungen in regulaeren Ausdruecken

Die Nummerierung der Dollars entspricht der Reihenfolge der vorderen Klammern.

$irgendwas = „From: blub@bla.de“;
if ($irgendwas =~/^(\S+).\s*(.*)$/) {
$headerName = $1;
$headerContent = $2;
}

/^(bla)*blub$/ findet blub ($1=bla)
nicht blblub
(bla.)*blub findet blaxlbub ($1=blax)
findet blaublaublub ($1=blau)
nicht blablub
bla.*blub findet blablub
findet blablablub
(bl(au)*g)+blub findet blaugblub ($1=blaug, $2=au)
findet blgblub
nicht blagblub
nicht blauaublub

Bsp: mary had a lamb a cow and a sheep

if (/mary/i) {…} i: caseinsensitive – Gross/Kleinschreibung egal
while (/a(.)/g) {print „$1\n“;}
g: global – Interpreter merkt sich die Stelle
bei mehrfacher Ausfuehrung wird jeweils das naechste a gefunden
while (/\sa\s(\S+)/g){print „$1\n“;}
findet „lamb“, „cow“, „sheep“

Suchen und Ersetzen: $blub =~s/old/new/

Links

Sag etwas dazu: