Frage regex greater than less than

Hein_nieH

Bekanntes Mitglied
Hallo,

ich habe eine Frage zum Filtern in Regex?

ich möchte Strings filtern, welche zwischen zwei Strings passen
Beispiel ich habe nachstehende Strings in einem Array:
AAA, ABC, BAX, EEE

nun möchte ich erreichen, dass alle Strings gefiltert werden, welche zwischen AAA und DDD liegen.
Das sollten sein: AAA, ABC, BAX

hier mein Filter:
strFilter = Pattern.quote("AAA") + "(.*?)" + Pattern.quote("DDD");

Leider funktioniert der Filter nicht wie erhofft, d.h. es wird nichts gefunden.
Mache ich da etwas falsch?
Wie müsste der Filter aufgebaut werden.

Gruss Hein_nieH
 
Soetwas kann ein regulärer Ausdruck leider nicht.
Er kann nicht "wissen", was es bedeutet, dass lexikografisch bzw. alphabetisch ein Buchstabe B, C und D "zwischen" A und E liegt.
Du könntest deine Frage aber anders formulieren.
Z.B.: "Finde alle dreistelligen Strings, bestehend aus Großbuchstaben, wobei jeder der einzelnen Buchstaben entweder A, B, C oder D ist", mit dem Regex:
[ABCD]{3} bzw. [A-D]{3}

So, wie du deinen Regex aktuell formuliert hast, bedeutet "zwischen" eben nicht lexikografisch "zwischen", sondern positional "zwischen".
 
Was man machen kann ist, ein Pattern zu finden, das ein Match bildet. Wenn man AAA - DDD haben will, dann bedeutet das ja folgende Kombinationen:
([ABC][A-Z][A-Z])|(D[ABC][A-Z])|(DD[A-D])`

Also einfach alle Möglichkeiten durchgehen und alle Bedingungen finden, die eben die gewünschte Menge abbilden.

Edit: Im Ausdruck fehlten zwei Öffnende Klammern ...
 
Zuletzt bearbeitet:
Hallo

eigentlich möchte ich in einer JTable-Spalte Werte filtern.
Hierzu nutze ich setRowFilter

// hier die Stelle aus meinem ursprünglichen Code
Java:
this.sorterMain.setRowFilter(RowFilter.regexFilter(strFilter, intColumnIndex));

Die Methode setRowFilter erwartet als Argument ein Object RowFilter.
RowFilter bietet eienen RegEx Ausdruck als Argument.

Wenn ich jetzt nicht regex benutze wie könnte ich denn mein Argument für RowFilter zusammenbauen.

Gruss Hein_nieH
 
Wenn ich jetzt nicht regex benutze wie könnte ich denn mein Argument für RowFilter zusammenbauen.
Was ist das Problem mit der genannten Möglichkeit? Dein Vorhaben ist mit regulären Ausdrücken ohne Probleme möglich.

Ansonsten kannst Du da auch beliebige RowFilter selbst schreiben, die irgendwas machen. Du kannst also Code in Java schreiben für Deinen Filter wenn RegEx nicht ausreichen sollte.
 
Problem gelöst.

Hallo,

also das Filtern in einer JTable innerhalb einer vorgegebenen Spanne war gar nicht so schwierig.
regex ist hierzu der falsche Ansatz.
Ich habe einen eigenen RowFilter gebaut.
Die grundsätzliche Vorgehensweise findet man in der Eclipse-Hilfe in der Klasse RowFilter.

Gruss Hein_nieH
 

Neue Themen


Zurück
Oben