# Regulären Ausdruck negieren



## Michael... (11. Aug 2008)

Hallo,

ich bin auf der Suche nach Möglichkeiten reguläre Ausdrücke zu negieren.
Momentan probiere ich mit look-around assertions und habe hierzu zwei Fragen.
Der Ausdruck, der z.B. negiert werden soll ist z.B. *te.*st* (wird mehr oder weniger vom Benutzer so eingeben)

Frage 1: Mein momentaner Stand sieht so aus *(?!te).*|.*(?<!st)*, aber dazu müsste ich die Benutzereingabe parsen. Kann man das vereinfachen oder vielleicht ganz anders schreiben - ohne zu parsen?

Frage 2: Warum mag Java bei der look behind assertion .* innerhalb und am Ende des Suchausdrucks nicht?
(?<!(.*test)) geht
(?<!(te.*st)) geht nicht
(?<!(te.{0, 10000}st)) geht, ist aber nicht astrein


----------



## Kim Stebel (11. Aug 2008)

darf man fragen was du damit eigentlich machen willst? der ansatz scheint mir schon sehr umständlich


----------



## Ark (11. Aug 2008)

Kann man nicht einfach den ursprünglichen Ausdruck nehmen und im Falle, dass die Zeichenkette passt, gerade das Gegenteil tun?

Ark


----------



## Michael... (12. Aug 2008)

Im wesentlichen will ich damit über Datensätze filtern, ähnlich dem benutzerdefinierten Filter in Excel und Co. Da man in dem Filter mehrere "positive" und "negative" Ausdrücke miteinander komibieren kann, bin ich eben auf der Suche nach einfachen Möglichkeiten reguläre Ausdrücke zu negieren. Bisher hatte ich diese Kombinationsmöglichkeit nicht und habe bei negativen Ausdrücken mittels des positiven gefiltert und dann eben das "Gegenteil getan". Ich habe mir auch schon überlegt die einzelnen Ausrücke nacheinander auf die Datensätze anzuwenden, allerdings würde ich gerne nur einmal ein gesamten Filterkriterium übergeben.


----------



## Kim Stebel (12. Aug 2008)

das bestätigt meine vermutung: unnötig umständlich.
mir ist nicht mal klar ob reguläre ausdrücke, wie sie in java verwendet werden (also mit backtracking etc), unter negation geschlossen sind.


----------



## Ariol (12. Aug 2008)

Keine Ahnung obs dir was bringt, aber...


```
static boolean test(String s)
	{
		return !s.matches("te.*st");
	}
```


----------



## xdavidx (12. Aug 2008)

```
if(Pattern.matches("regex",stringx) == false) {

todo

}
```


----------

