# Regex (Case insensitive und Umlaute)



## Camino (29. Apr 2012)

Hallo,

ich hab eine JTable mit RowFilter, welche mir die Daten von den Eingaben in einem Textfeld über einen DocumentListener filtert. Der Regex für den RowFilter sieht so aus:

```
"^(?i)" + tf1
```
tf1 ist der String aus Textfeld1. Wenn ich das richtig verstanden habe, bedeutet dies, dass ^ für Stringanfang steht, (i) für case insensitive und ? für kein oder einmal vorkommend. Hat bisher auch ganz prima so funktioniert. Nur wenn ich jetzt in der Tabelle einen String habe, der mit einem Umlaut anfängt (z.B. Ö), dann wird dies nicht mit einem ö im Textfeld gefunden. Erst wenn ich im Textfeld das Ö (Grossbuchstabe) eintippe, erscheint auch die gefilterte Zeile in der Tabelle.

1.) Weiss jemand, woran das liegt und wie man das hinkriegen kann, dass auch Umlaute, egal ob Gross- oder Kleinschreibung, gefunden und gefiltert werden?

2.) Die Daten in der Tabelle sind Namen und kommen aus einer Datenbank. Von dort kommen sie alphabetisch sortiert in eine Liste und dann sind Umlaute in den Buchstaben einsortiert, also steht dort  z.B. Oberdorf, Odenthal, Öttinger, Overath... Ich überlege gerade ob es sinnvoll ist, wenn man dieses Ergebnis beim Filtern auch genau so erhält, egal ob man als Anfangsbuchstabe ö/Ö oder o/O eingibt. Also der Name Öttinger sollte sowohl bei ö/Ö als auch bei o/O mit in die gefilterte Auswahl kommen. Wie wäre so etwas denn möglich?


----------



## turtle (29. Apr 2012)

Ich habe gerade mit dem RegExp Plugin in Eclipse probiert und es scheint mir, dass keine perfekte Lösung, die in allen Locales klappt, existiert.

Ich habe folgenden regulären Ausdruck

```
(^[öÖäÄüÜßa-zA-Z]*$)
```
Dieser matcht Oberdorf, Odenthal, Öttinger, Overath, also alle Zeichenketten (beliebiger Länge) von Anfang bis Ende, die Gross/Kleinbuchstaben und Umlaute in Gross/Klein enthalten.


----------



## Camino (29. Apr 2012)

Hey, danke für den Tipp. Vielleicht werde ich das dann so umsetzen. Mich wundert halt schon, dass es mit der bisherigen Version bei allen bis auf die Umlaute funktioniert. Wahrscheinlich funktioniert es dann auch nicht bei Namen mit solchen Buchstaben wie é, è, ê oder anderen. Gibt es da nicht eine bessere Möglichkeit, oder muss ich alle diese Zeichen aufführen?


----------



## turtle (29. Apr 2012)

Das habe ich nicht geprüft, aber glaube, dass das sehr von der Umgebung in der eine Locale gesetzt wird, abhängig sein dürfte. 

Reguläre Ausdrücke gibt es halt schon sehr lange und ist sehr auf ASCII konzentriert. Darin gibt es halt Umlaute und Ähnliches nicht so ohne Weiteres

Ich würde alle Zeichen aufnehmen, müsste mit einer Query auf der DB schnell gemacht sein


----------



## Camino (29. Apr 2012)

turtle hat gesagt.:


> Ich würde alle Zeichen aufnehmen, müsste mit einer Query auf der DB schnell gemacht sein



Du meinst, alle vorhandenen Zeichen aus der DB auslesen und dort einbauen? Hmm, ich weiss ja nicht...

Aber wahrscheinlich komm ich nicht drum herum, mir selber eine Funktion zu bauen. Weil ich würde ja auch gerne z.B. die Namen mit é, è und ê angezeigt bekommen, wenn ich nur ein e eingebe. Oder irgendwelche anderen Sonderbuchstaben, die in Namen vorkommen könnten. Ich weiss aber leider noch nicht, wie ich das umsetzen könnte. Hast du einen Ansatz oder eine Idee dafür?


----------

