| 

.NET C# Java Javascript Exception

5
Hi,

Ich stelle mich bei einem regulären Ausdruck gerade etwas blöd an, vielleicht kann mir ja jemand schnell helfen. Irgendwie hab ich zwar ein paar Beispiele gefunden, nur irgendwie nicht genau das Beispiel, das ich brauche.

Mit Notepad++ durchsuche ich mehrere Dateien mit RegEx nach E-Mail-Adressen. Dafür habe ich folgenden Ausdruck:

[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}


Jetzt möchte ich aber, dass er mir das nicht anzeigt, wenn die E-Mail-Adresse foo@bar.com ist. Hab schon mehreres probiert, z.B.:

[A-Z0-9._%+-][^foo]+@[A-Z0-9.-]+\.[A-Z]{2,4}

[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}[^foo@bar.com]

und noch weitere Kombinationen. Es kommt aber nicht das richtige Ergebnis raus.

Irgendein RegEx-Magier hier, der mir schnell den richtigen Zauberspruch verraten kann?
News:
02.08.2012
Feroc 1,2k 2 9
2 Antworten
2
(?!foo@bar\.com)[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}

Mit Dank an johny7 für den Hinweis auf lookahead/lookbehind sowie vor allem Testing The Same Part of a String for More Than One Requirement und How to “inverse match” with regex?.

Getestet mit http://www.regexplanet.com/advanced/java/index.html

Notepad++ kann lookaheads noch nicht sehr lange, also im Zweifel aktualisieren. Mit der aktuellen Version 6.1.5 funktioniert es bei mir. Damit Vorkommen von foo@bar.com nicht als "oo@bar.com" gefunden werden, ist es notwendig, obigen Ausdruck vorn und hinten mit jeweils einem "\b" zu umschließen.

P.S. Für Deine Zwecke reicht es wahrscheinlich, aber eine umfassende Regex für beliebige gültige E-Mail-Adressen ist etwas komplizierter ;-) Siehe auch Using a regular expression to validate an email address.
03.08.2012
Matthias Hlawatsch 13,2k 4 9
Update: Habe den Absatz zur Verwendung mit Notepad++ eingefügt.
Matthias Hlawatsch 03.08.2012
1
Ich glaube, so ohne Weiteres geht es gar nicht.

[^foo@bar.com]

sorgt nur dafür, dass die angegebenen Zeichen nicht vorkommen dürfen, aber nicht die Zeichenfolge.

Du könntest es über Lookahed und Lookbehind versuchen (sprich: im Bereich von 'bar' nachsehen, das vor dem @ kein foo und nach dem Punkt kein com steht). Um die exakte Zeichenfolge bar zu negieren, musst du so etwas wie

[^b][^a][^r]

probieren unterzujubeln.
02.08.2012
johny7 521 1 8

Stelle deine Regex-Frage jetzt!