AND und Negation in RegulärenAusdrücken ?

Status
Nicht offen für weitere Antworten.
Hallo,

leider habe ich bisher keine Möglichkeit gefunden das AND und die Negation unter Regex für Wörter, nicht für Zeichenklassen, einzugeben.

Ich habe nämlich das folgende Problem:

Mein Programm liest Zeilen aus einer Datei und überprüft dann anhand eines Pattern, dass der Benutzer in einem Textfeld eingeben kann, welche Zeilen weiter verwendet werden sollen und welche nicht.

Beispiel:

3 g Eier, 5 Butter
3 g Eier, 3 Äpfel
3 g Zucker

Wie kann der Benutzer nun in Regex eingeben, - wie gesagt, das Pattern wird über das Interface eingelesen, es soll und wird nicht fest einkodiert in den Programmcode - dass er nur die Zeilen haben möchte, in den "Ei" AND "Butter" vorkommen?

Das OR gibt es, wie gesehen ... z.B. Eier|Butter ... aber es gibt leider kein Ei&Butter ...

Genau so, wie ich keine Negation für Wörter gefunden habe ...

z.B., wenn ich sagen will, alle Zeilen in den NOT "Ei" vorkommt ... ^Ei ... sucht nur nach Ei am Zeilenanfang ...

Ich frage mich, warum es das OR gibt, aber das AND und die Negation nicht ... und wie sich dieses Problem nun lösen lässt ...

Ich befürchte schon, der Programmcode wird sehr aufgebläht werden, weil ich mehrere Textfelder für beliebig viele Pattern zur Verfügung stellen muss ... und dazwischen dann immer eine ComboBox, wo der Benutzer dann einen logischen Operator auswählen kann, der die Pattern verbindet ... und dann geht es schon durch die ganzen If-Then, Else-If-Then - Zweige ... Oh, Oh, Oh ... finde ich sehr unglücklich, dass es das AND und die Negation nicht gibt ...

Grüße
 

Ark

Top Contributor
Für Eier und Butter würde ich
Code:
.*Eier.*Butter.*
nehmen, dann muss die Reihenfolge so aber auch stimmen. (Mein/dieser Ausdruck passt auf den gesamten String.)

Aber wie das mit den anderen Regex ist … keine Ahnung.

Überhaupt mal so eine Frage: Wie kann man die folgenden Dinger verwenden?
Special constructs (non-capturing)
(?:X) X, as a non-capturing group
(?idmsux-idmsux) Nothing, but turns match flags on - off
(?idmsux-idmsux:X) X, as a non-capturing group with the given flags on - off
(?=X) X, via zero-width positive lookahead
(?!X) X, via zero-width negative lookahead
(?<=X) X, via zero-width positive lookbehind
(?<!X) X, via zero-width negative lookbehind
(?>X) X, as an independent, non-capturing group
Kann das bitte mal jemand hier erklären?!

MfG
Ark
 

Wildcard

Top Contributor
Ein AND kannst du beispielsweise dem zweimaligen Aufrufen von Matcher#find lösen. Gibt bestimmt auch ein konstrukt in einem RegEx...
Mit NOT wird's dann kompliziert. Soweit ich weiß muss man dazu mit lookaround Konstrukten arbeiten.
 
Hallo ihr Beiden,

also ich bin nun weitergekommen ...

es sind tatsächlich diese Lookaround-Konstrukte, mit den ich das logische AND lösen kann ...
und zum Teil auch die Negation.

Beispieldatei:

3 g Ei 5 g Mehl
2 g Ei
5 g Mehl
3 g Salz
3 g Mehl 5 g Ei
3 g Ei 5 g Salz 6 g Mehl
2 g Ei 3 g Mehl 3 g Salz
5 g Salz 3 g Mehl 4 g Ei
3 g Mehl 5 g Salz 2 g Ei
3 g Salz 2 g Ei 4 g Mehl
4 g Mehl 1 g Ei 6 g Salz

Fälle:

- Alle Zeilen, wo Ei, Mehl und Salz vorkommen:

Lösung: (?=.*Ei.*)(?=.*Mehl.*)(?=.*Salz.*)

3 g Ei 5 g Salz 6 g Mehl
2 g Ei 3 g Mehl 3 g Salz
5 g Salz 3 g Mehl 4 g Ei
3 g Mehl 5 g Salz 2 g Ei
3 g Salz 2 g Ei 4 g Mehl
4 g Mehl 1 g Ei 6 g Salz

- Alle Zeilen, wo Ei irgendwo vorkommt, und Mehl, irgendwann gefolgt von Salz, vorkommt:

Lösung: (?=.*Ei.*).*Mehl.*.*Salz.*

2 g Ei 3 g Mehl 3 g Salz
3 g Mehl 5 g Salz 2 g Ei
4 g Mehl 1 g Ei 6 g Salz

So, das war es erstmal zu diesen Teil ... ich melde mich wieder, wenn ich weis, wie ich den Fall:

- Alle Zeilen, wo irgendwo Ei, aber nirgendwo Mehl vorkommt ... gelöst habe ... und danach dann etwas wie
- Alle Zeilen, wo irgendwo Ei, irgendwo Mehl, aber nirgendwo Salz vorkommt.

Grüße
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Hilfe bei negation von suchabfrage Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben