PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum Buch "Reguläre Ausdrücke" von Jeffrey Friedl



chrizel
17-07-2006, 23:01
Hallo Leute,

ich habe eine Frage zum Buch Reguläre Ausdrücke, 2. Auflage (deutsch) von Jeffrey E. F. Friedl. Bin zwar erst bei Seite 70, habe aber da was festgestellt wo ich glaube, dass es sich um einen Fehler handelt. Konnte in der Errata keinen Hinweis dazu finden, desshalb frage ich einfach mal hier nach. Vielleicht haben ja einige die zweite Auflage.

Ich zitiere Seite 68, Absatz drei:
Wenn eine Wortgrenze eine Position ist, bei der auf der einen Seite \w passt und auf der anderen Seite \w nicht passt, dann koennen wir mit (?<!\w)(?=\w) einen Wortanfang und mit dem Gegenstueck (?=\w)(?<!\w) ein Wortende erkennen.

Letzteres erscheint mir irgendwie falsch. Meiner Meinung nach muesste das Gegenstueck fuer Wortende so ausschauen: (?<=\w)(?!\w)

Oder liege ich da falsch? Wuerde mich ueber eine Antwort freuen.

ciao
chrizel

Waxolunist
18-07-2006, 09:23
Ja du hast recht. Wolltest du das hören. Ich kanns dir noch mal sagen. Ja du hast recht. Ja du hast recht. Ja du hast recht. Ja du hast recht. Ja du hast recht. Ja du hast recht. Ja du hast recht. Ja du hast recht. Ja du hast recht. Ja du hast recht.

Danke für den Hinweis. Schreibs an den Verlag und kassier die Belohnung für den verlorenen Fehler.
Ein Fehler in 70 Seiten Regulären Ausdrücken ist allerdings nicht schlecht.

Ich verwende zum Testen am liebsten Applets, dies zu Hauf im Internet gibt. Eines, dass ich besonders mag gibts hier: http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html

chrizel
18-07-2006, 09:46
:rolleyes:

Danke, ich war mir nur nicht 100%ig sicher weil ich ja noch ziemlich am Anfang stecke und ich diese Lookahead/Lookbehind Ausdruecke evtl. nicht richtig verstanden habe, aber dann passt das ja... werd dem Verlag da mal ne kurze E-Mail mit dem Fehler schicken...

Etwas komisch ist deine Antwort ja schon, aber so sind wohl die Oesterreicher... ;) :D

Romanday
19-07-2006, 07:14
:rolleyes:

Danke, ich war mir nur nicht 100%ig sicher weil ich ja noch ziemlich am Anfang stecke und ich diese Lookahead/Lookbehind Ausdruecke evtl. nicht richtig verstanden habe, aber dann passt das ja... werd dem Verlag da mal ne kurze E-Mail mit dem Fehler schicken...

Etwas komisch ist deine Antwort ja schon, aber so sind wohl die Oesterreicher... ;) :D


Wäre nett, wenn Du kurz die Programme, Scriptsprachen etc. auszählst,
welche den Ausdruck (?!\w) verstehen (unterstützen).
Dann können die Anfänger, das auch mal testen.

chrizel
19-07-2006, 07:42
Wäre nett, wenn Du kurz die Programme, Scriptsprachen etc. auszählst,
welche den Ausdruck (?!\w) verstehen (unterstützen).
Dann können die Anfänger, das auch mal testen.

Ich weiss nicht welche diesen Ausdruck alle verstehen, ich kann dir nur sagen dass es in dem Fall um Perl geht. Kann sein dass das auch Ruby und andere Systeme mit PCRE-Support koennen.

Edit: Ok, ich haette mir die Frage auch einfach selber beantworten koennen, indem ich es ausprobiert haette - das habe ich nun getan, hier also das Beispiel in perl:


$str = "hallo welt test";
$str =~ s/\b/\|/g;
print $str;

\b steht fuer Wortgrenze. Das Programm gibt folgendes aus:

|hallo| |welt| |test|

Alle Wortgrenzen werden durch | ersetzt... also passts. Im Buch geht es darum einen Ersatz fuer \b anzugeben. (nur um das Prinzip von Lookahead/Lookbehind-Ausdruecken bzw. \b zu zeigen)... hier also das Beispiel mit dem Ausdruck aus dem Buch:


$str = "hallo welt test";
$str =~ s/((?<!\w)(?=\w)|(?=\w)(?<!\w))/\|/g;
print $str;

Was natuerlich nicht korrekt funktioniert sondern nur Wortanfaenge matcht:

|hallo |welt |test

Nun meine Korrektur:


$str = "hallo welt test";
$str =~ s/((?<!\w)(?=\w)|(?<=\w)(?!\w))/\|/g;
print $str;

Gibt richtig aus:

|hallo| |welt| |test|

Romanday
19-07-2006, 08:51
Ich weiss nicht welche diesen Ausdruck alle verstehen, ich kann dir nur sagen dass es in dem Fall um Perl geht. Kann sein dass das auch Ruby und andere Systeme mit PCRE-Support koennen.


Ich weiß, Perl kann immer alles.:D
Im Buch gibt es aber eine Vergleichsliste.
Ich weiß jetzt nicht aus dem Kopf ob egrep ?= oder ?< versteht?