Problem mit RegExp

AndyK

Vice Admiral Special
Mitglied seit
07.01.2006
Beiträge
758
Renomée
18
Ich möchte gerne eine RegExp haben, die Nullen innerhalb/Am Anfang/Am Ende eines Wortes findet, aber nicht auf "0MB" reagiert.

Bisher habe ich als RegExp: \b\w*0\w*\b
Das findet bisher alle Nullen, leider aber auch den Text 0MB, oder 100MB

was muss ich wo einsetzen, damit \b\w*0MB\w\b nicht gefunden wird?

AndyK
 
Probier mal \b\w*0[^MB]*\b
 
hatte ich schon, das bedeutet aber leider, dass nach der 0 kein M oder B stehen darf.
Des weiteren darf bei Deinem Ausdruck jedes beliebige Zeichen ausser M oder B nach der 0 folgen und das von kein mal bis unendlich oft.
Diese RegExp nimmt also Alles komplett mit, wenn nach der 0 kein M oder B vorkommt.

hatte auch schon probiert: \b\w*0([^M][^B]|\w)*\b
Funktioniert aber auch nicht wie gewollt. :(

Hab jetzt erst mal folgendes: \D+0\D+
Nimmt zwar mehr als gewollt, aber identifiziert jetzt nur einzelne Nullen in einem Wort. Wenn eine Zahl wie 10 oder 100 mit oder ohne MB im Text ist, greift die RegExp nicht.
Ist zwar noch nicht das was ich eigentlich wollte, aber zumindest kann ich einen String auf einzelne Nullen prüfen.

Wenn mir aber jemand helfen kann genau das (erste) Wort, welches die Null enthält zu identifizieren, wäre ich sehr dankbar.

AndyK
 
Zuletzt bearbeitet:
*bump*

Einen Versuch/Hilferuf noch... :-[


AndyK
 
Und was passiert wenn du es so probierst:
\b[a-zA-Z]*[0]+[^M][^B][a-zA-Z]*\b

Bringt das vielleicht das Ergebnis?
Hab etz mal bissl mit Expresso rumgetestet und des schaut ganz gut aus...
 
Und was passiert wenn du es so probierst:
\b[a-zA-Z]*[0]+[^M][^B][a-zA-Z]*\b

Bringt das vielleicht das Ergebnis?
Hab etz mal bissl mit Expresso rumgetestet und des schaut ganz gut aus...

Hab mit http://regexpal.com probiert und komme leider nicht zum Ergebnis.
Beispieltexte:
test 100 am Abend wird gar nicht erkannt
test 00MB am Abend wird fälschlicherweise erkannt

Wenn ich den Ausdruck so verändere wird leider beides erkannt:
\b[a-zA-Z\d]*[0]+[^M][^B][a-zA-Z]*\b

AndyK
 
Ich gebe zu, dass du recht hast (offenkundiger Beweis *g*)

Mal schaun ich probier noch rum, vielleicht fällt mir noch was ein,
dann meld ich mich.
 
\b[a-zA-Z]*[^0-9]+[0]+[^M][^B][a-zA-Z]*\b

Danke, aber hier das gleiche wie bei Jack. Der erste Text wird nicht erkannt, der zweite wird fälschlicherweise erkannt.


@Jack: Danke ich fummel auch noch ein bischen...

AndyK
 
hmm is auch echt ein rumgefummel mit den RegEx jedes mal...

machs doch einfacher,
nimm deine variante mit \D+0\D+
speicher dir das ergebniss + die nächsten 2zeichen (evtl 3 wegen whitespace) in einen string und überprüf dann,
ob ein MB drin vorkommet, wenn ja verwerfs wieder wenn nicht, kannst es verwenden.
 
Ich glaub ich hab es jetzt!!
Für Alle die es auch interessiert:
\b\w*0(?!MB|0)

\b für Wortanfang
\w* word character [A-Za-z0-9_], kann (auch öfter), muss aber nicht auftauchen
0 ist klar
(?!MB|0) darf nicht gefolgt werden von MB oder einer weiteren 0

Danke an: http://regexpal.com/
und den (verständlichen) Erklärungen bei Mozilla: Special_characters_in_regular_expressions

AndyK
 
Wie kommen die Nullen denn zustande? Du könntest alternativ versuchen, die Ursache zu beheben und nicht ihre Wirkung ;)
 
Die Ursache sind Spam E-Mails...

und diese RegEx ist Teil meiner Filter. :)

Ich würde gerne die Ursache beheben... zur Zeit über 1500 Spams pro Tag.
meistens mit gefälschten Absendern, nämlich meinen eigenen mit falscher IP über einen OpenRelay, oder Postmaster, die mir auf die gefälschten Absender antworten, dass "meine" Mail geblockt wurde, oder der Empfänger nicht existiert, oder oder oder...
 
Zurück
Oben Unten