kennt jemand eine einfache Möglichkeit in regulären Ausdrücken deutsche
Umlaute sowie ß und andere Buchstaben wie etwa das dänische ö
(durchgestrichenes o) zu erkennen? Ich suche sozusagen eine
Zeichenklasse für Buchstaben verschiedener Sprachen.
Bisher verwende ich java.util.regex. Gibt es vielleicht eine andere
Bibliothek, die sowas anbietet?
Gruß
Christian
--
Das Forum für Groovy- und Grails-Programmierer: www.groovy-forum.de
Christian Helmbold wrote:
> kennt jemand eine einfache Möglichkeit in regulären Ausdrücken deutsche
> Umlaute sowie ß und andere Buchstaben wie etwa das dänische ö
> (durchgestrichenes o) zu erkennen? Ich suche sozusagen eine
> Zeichenklasse für Buchstaben verschiedener Sprachen.
Hm?
"Hallöleß".matches(".*ö.*ß")
liefert bei mir true.
Oder möchtest Du *alle* Umlaute erwischen, also quasi was über US-ASCII
hinausgeht?
Grüße, Michael.
>Hallo zusammen,
>
>kennt jemand eine einfache Möglichkeit in regulären Ausdrücken deutsche
>Umlaute sowie ß und andere Buchstaben wie etwa das dänische ö
>(durchgestrichenes o) zu erkennen? Ich suche sozusagen eine Zeichenklasse
>für Buchstaben verschiedener Sprachen.
>
>Bisher verwende ich java.util.regex. Gibt es vielleicht eine andere
>Bibliothek, die sowas anbietet?
Hast du dir die JavaDocs zu java.util.regex.Pattern denn schon mal genau
angeschaut?
Nach allem was dort steht, sollte dieser Ausdruck
[\p{L}&&[\P{Alpha}]]
tun was du wünschst, sofern ich dich richtig verstanden habe, dass du
alle Buchstaben außer den "normalen" von a-z bzw. A-Z matchen möchtest.
Zwischen "deutschen" Umlauten äöü (ß ist kein nun gerade kein Umlaut!)
und "dänischem" ø zu unterscheiden, wird dir jedoch nur gelingen, wenn
du die Buchstaben selbst in entsprechende Gruppen aufteilst, den vom
zugrundeliegenden Code (Unicode) gehören sie allesamt zu den
westeuropäischen Zeichen, die zum größten Teil im Latin Supplement
Block zusammengefasst sind (vgl.
java.lang.Character.UnicodeBlock.LATIN_1_SUPPLEMENT).
Ginge es dir jedoch darum unterschiedliche Schriftsysteme auseinander zu
halten, so ginge das relativ problemlos indem du dich auf die
entsprechenden Unicode-Blöcke beziehst:
// alle kyrillischen Zeichen
[\p{InCyrillic}\p{InCyrillicSupplementary}]
// alle griechischen Zeichen
[\p[InGreek}\p{InGreekExtended}]
Und wenn du es wieder auf Buchstaben begrenzen willst, dann sollte das so
gehen:
[\p{L}&&[\p[InGreek}\p{InGreekExtended}]]
BTW, ich denke du wirst kaum eine andere Regex-Library finden, die Unicode
so gut unterstützt wie java.util.regex. (Habe aber selbst schon lange
nicht mehr nach anderen geschaut, vielleicht hat sich da ja doch was getan.)
cu
> Nach allem was dort steht, sollte dieser Ausdruck
>
> [\p{L}&&[\P{Alpha}]]
>
> tun was du wünschst, sofern ich dich richtig verstanden habe, dass du
> alle Buchstaben außer den "normalen" von a-z bzw. A-Z matchen möchtest.
Genau das ist die Lösung zu meinem Problem. Vielen Dank! Ich war einfach
nicht auf das \p{L} gekommen, es wird zwar in der Doku zu
java.util.regex.Pattern erwähnt, aber nur in einem anderen Ausdruck,
weshalb ich es nicht beachtet hatte.
> Oder möchtest Du *alle* Umlaute erwischen, also quasi was über US-ASCII
> hinausgeht?
Ja, das war meine Absicht. Die Lösung von Ralf ist das, was ich gesucht
hatte.