MudGuard: Reguläre Ausdrücke mit awk/ Denkfehler

Beitrag lesen

Hi,

so, [A-z] bedeutet doch das ein zeichen von A-z egal ob gross oder klein geschrieben.

Ist das bei awk anders als üblich? Wäre mir neu, sollte doch bei awk so sein wie bei sed, in vi usw.

In den mir bekannten Regex-Maschinen bedeutet [A-z] ein beliebiges Zeichen zwischen großem A und kleinem z - das sind ein paar Zeichen mehr als nur die Buchstaben, nämlich die eckigen Klammern, der Backslash, das Caret, das Backtick und der Unterstrich (siehe z.B. http://www.unicode.org/charts/PDF/U0000.pdf).

Wenn wirklich nur die Buchstaben gewünscht sind: [A-Za-z] oder, wenn der gesamte Ausdruck case-insensitive ist, das i-Flag setzen und nur [a-z] oder [A-Z] nutzen.

da ich aber nicht weiss wie lang der string vor dem @-zeichen ist, setze ich ein + dahinter, das + bedeutet doch "Ein oder mehreres Auftreten des vorangegangenes Zeichen" in diesem fall das eines  ziwschen A-z.
danach soll ein @ zeichen kommen also bin ich schon soweit:

[A-z]+@

Hm. Im ungequoteten local-part können durchaus auch andere Zeichen (z.B. Bindestrich oder Punkt oder Ziffern) vorkommen.

nach dem @ kommt wieder ein string dessen länge ich nicht kenne also wieder [A-z]+

s.o. - auch hier sind wesentlich mehr Zeichen als nur Buchstaben erlaubt.

dann kommt im normalfall ein punkt, da ein punkt aber eine funktion hat kaskadiere ich ihn .\ nun bin ich soweit:

kaskadieren? Du meinst escapen?
Aber dazu ist (wie ja schon erwähnt wurde) nur der \ vor dem Punkt richtig - der \ danach escapet das folgende Zeichen.

[A-z]+@[A-z].\ nach dem punkt . kommt dann ja meistens die TPL endung de oder org oder auch com [... usw]

TPL? TLD (Top-Level-Domain).

Es könnte aber auch die SLD folgen. Oder die Third-Level-Domain. Oder die fourth-level-domain. Oder ...

die setzte ich auch mit [A-z]+ zusammen

s.o., da sind immer noch zu viele Zeichen drin.

da ich ja auch nicht die länge kenne ob nun de 2 oder com 3

oder z.B. info mit 4 oder travel mit 6 Zeichen.

Da die TLD aus mindestens 2 und (derzeit) maximal 6 Zeichen besteht, wäre anstelle des + auch {2,6} sinnvoll.

und ausserdem noch am ende des musters $

Wenn Du den Ausdruck am Stringende verankern willst, warum dann nicht auch am Stringanfang mit ^ ?

[A-z]+@[A-z]+.[A-z]+$

@[@]._^

würde von Deinem Ausdruck gefunden ...

awk '/[A-z]+@[A-z]+.[A-z]+$/{print "Gefunden",$0}'
doch mir wird nichts angezeigt.

Das liegt hauptsächlich am [ - keine Deiner Mail-Adressen enthält ein [ nach einem Punkt ...

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter
O o ostern ...
Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.