Regulärer Ausdruck: alles außer

Gast #742830
Lesenswert?

[^test] matcht exakt einen Buchstaben, der nicht t und nicht e und nicht 
s ist. Das ist nicht das was du moechtest.

"alles ausser 'test'" ist allerdings nicht eindeutig genug, wuerde ich 
sagen.
Wenn du so einen Eingabe-String hast:
"abctestdef"
auf was soll der regulaere Ausdruck dann passen?

1. Auf "abc"?
2. Auf "abctes"?
3. Auf "def"?
4. Auf "estdef"?
5. Auf gar nichts, weil in dem String "test" vorkommt?



Ein match "abc" "def" ist nicht erreichbar mit regulaeren Ausdruecken, 
da das kein zusammenhaengender Substring von "abctestdef" ist.
Persönliche Seite #742831
Lesenswert?

[^test] matcht genau ein Zeichen und zwar eines, das kein t, e oder s 
ist.

So wie die Frage jetzt formuliert ist kann man fast keine sinnvolle 
Antwort geben.

Die Problematik bei text vorm test und text danach liegt darin, dass 
man mit einem Regex-Ausdruck nicht text vorm  und text danach 
auswählen kann. Man kann mehrere Regex_Ausdrücke auswählen und dann 
kombinieren.

Ausdruck 1: "text vorm "
Ausdruck 2: "test"
Ausdruck 3: " und text danach"

In dem Fall würde man mit runden Klammern gruppieren und die so 
erzeugten Rückwärtsreferenzen neu arrangieren. Hier also \1 und \3 
behalten und \2 wegwerfen.

http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

EDIT: Chris war schneller ;-)
#742832
Lesenswert?

Mich interessiert der Text drumherum gar nicht.

Der Java RegExp-Parser (->Matcher) prüft einfach, ob der übergebene 
String auf den Ausdruck passt.

Und ich will ihn dazu bringen, TRUE zu sagen, wenn ein String den Text 
"test" nicht enthält :)

Ich hoffe, das ist klarer geworden, was ich vorhab.
Persönliche Seite #742839
Lesenswert?

Das ist kein Workaround.

Du sagst dich interessiert der String an sich nicht, nur ob der String 
"test" darin enthalten ist. Wenn er NICHT drin ist, willst du TRUE 
haben.

Also fragst du den String ab, ob der String test enthalten ist (liefert 
TRUE oder FALSE) und bildest die logische Negation (macht aus dem FALSE 
das gewünschte TRUE).

Du kannst dir auch von hinten durchs Knie ins Auge schiessen. Mir wird 
das zu blöd und ich klinke mich jetzt hier aus.
Gast #742896
Lesenswert?

Bitte schoen:

^([^t]*(t([^e]|e([^s]|s[^t]))|.{0,3}$)?)*$

Das Muster zum Erstellen dieses Ausdrucks ist nicht schwierig zu 
erkennen.

Allerdings wuerde ich eher diesen Ausdruck als "workaround" bezeichnen 
als das einfache Negieren einer Suche nach "test".
Gast #972080
Lesenswert?

Huhu,

ich habe hier ein Mailscript, in welchem ich im Adminbereich reguläre 
Ausdrücke für Mails eingeben kann, die er löschen soll.

Ich lasse zum Beispiel Mails löschen, die ***SPAM*** im Betreff haben. 
Das funktioniert so:
/^\*\*\*SPAM\*\*\*/

Nun möchte ich alle Mails löschen, die RE: als Betreff haben.
Mails mit RE: Hallo im Betreff sollten aber dennoch ankommen. Wie kann 
ich mit einem regulären Ausdruck genau nur nach diesem RE: suchen ohne 
Beachtung von z.B. RE: Hallo?

Vielen Dank.
Liebe Grüße Danny

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren