Forums Neueste Beiträge
 

Regexformulierungen

17/05/2008 - 10:21 von Thomas Hargen | Report spam
Hallo,

ich hab so meine liebe Not mit Regex und den Metazeichen. Es gibt ja
jede Menge Tutorials, aber ich hab nichts gefunden über den
Geltungsbereich von Metazeichen. Folgender Ausduck soll alle Strings
die mit einen oder zwei Punkten beginnen auszufiltern.

$path =~ /^\.\.?$/

Was ich nicht verstanden habe, ist, wie weit gilt ^ auf das Suchmuster.
Wirkt ^ nur auf das erste Zeichen oder auch auf das zweite? Warum steht
da noch ein $ für das Ende des Strings, wo doch das Suchmuster nur am
Anfang vorkommen kann? Gilt $ nur auf das erste oder auch auf das zweite
Zeichen davor?

Ich möchte Den Ausdruck erweitern, das er mir auch Dateien mit einen
Punkt ausfiltert.

Hat jemand eine Tipp, wo der Geltungsbereich für Metazeichen einem
plausibel erklàrt wird?

mfg
Thomas
 

Lesen sie die antworten

#1 Paul Hink
17/05/2008 - 13:42 | Warnen spam
Thomas Hargen wrote:

ich hab so meine liebe Not mit Regex und den Metazeichen. Es gibt ja
jede Menge Tutorials, aber ich hab nichts gefunden über den
Geltungsbereich von Metazeichen. Folgender Ausduck soll alle Strings
die mit einen oder zwei Punkten beginnen auszufiltern.

$path =~ /^\.\.?$/



Das tut diese Regular Expression aber nicht (s.u.). Mal ganz davon
abgesehen, dass =~ nichts ausfiltert, sondern lediglich prüft, ob der
Inhalt von $path auf die Regular Expression passt.

Was ich nicht verstanden habe, ist, wie weit gilt ^ auf das
Suchmuster. Wirkt ^ nur auf das erste Zeichen oder auch auf das
zweite?



^ wirkt auf gar kein Zeichen. Ein ^ am Anfang einer Regular Expression
bedeutet "Anfang der Zeichenkette".

Warum steht da noch ein $ für das Ende des Strings, wo doch das
Suchmuster nur am Anfang vorkommen kann? Gilt $ nur auf das erste
oder auch auf das zweite Zeichen davor?



Auch $ wirkt nicht auf irgendwelche Zeichen, sondern bedeutet "Ende der
Zeichenkette".

Die von dir oben angegebene Regular Expression bedeutet Stück für Stück
erklàrt, dass eine Zeichenkette folgenden Aufbau haben muss, um zu
matchen:

^ = "Anfang der Zeichenkette"
\. = ein Zeichen "." (ein Punkt)
\. = noch ein Zeichen "."
? = das vorherige Objekt (der zweite Punkt) darf entweder kein- oder
einmal vorkommen
$ = "Ende der Zeichenkette"

Die Regular Expression passt also ausschließlich auf die beiden
Zeichenketten "." und ".." (ein Punkt und zwei Punkte unmittelbar
hintereinander). (Und auf die Zeichenketten "." und "..", wobei
"" für ein Newline steht, weil "$" auch auf "Newline vor dem Ende der
Zeichenkette" matcht.)

Ich möchte Den Ausdruck erweitern, das er mir auch Dateien mit einen
Punkt ausfiltert.



Du meinst "alle Zeichenketten mit einem Punkt am Anfang"? Dazu würde
z.B. der Ausdruck /^\./ genügen ("Anfang der Zeichenkette" gefolgt von
einem Punkt).

Ähnliche fragen