regex case insensitive trimmed

TM69

Bekanntes Mitglied
Wie müsste eine regex - Ausdruck aussehen, wenn man case insensive trimmed string sucht?

z.B. gesucht " meinName "

Übergabe:
"Mein" -> false
"Name" -> false
"meinNamemeinName" -> falsch
" meinName" -> true
"meinName " -> true
" meinName " -> true
"MEINNAME" -> true
"meinname" -> true
 
Wie müsste eine regex - Ausdruck aussehen, wenn man case insensive trimmed string sucht?

z.B. gesucht " meinName "

Übergabe:
"Mein" -> false
"Name" -> false
"meinNamemeinName" -> falsch
" meinName" -> true
"meinName " -> true
" meinName " -> true
"MEINNAME" -> true
"meinname" -> true
Java ist von Haus aus auf Case Insensitive eingestellt.
Optionale Leerzeichen findest du mit "($)?"
 
Tobias ist ganz gelöscht worden - hier war eine Lösungsidee von Ihm, die sinnvoll aussieht.
Seine Idee war die Nutzung von Word Boundaries (\b). Damit kann man nach einem Wort suchen. "\\bmeinName\\b" sucht also nach dem Wort meinName.

Hier ist aber unklar, ob dies gefragt ist. Was ist mit "abc meinName xyz" - soll da meinName auch gefunden werden?

Wenn es nur um ein Trim geht, dann wäre die Nutzung von White Space (\s) eine Idee: "\\s*meinName\\s*" - da dürfen dann beliebige Whitespace Zeichen davor sein.

Generell ist auch immer aufzupassen, was für ein Aufruf man macht - es gibt halt Aufrufe, die immer den ganzen String matchen wollen, ein "\\s*meinName\\s*" ist dann gleichbedeutend zu "^\\s*meinName\\s*$". Das muss man aus meiner Sicht immer beachten.

Bleibt der Punkt Gross-/Kleinschreibung. Tobias hatte dies einfach beim Pattern.compile Aufruf als Parameter übergeben.
Das entspricht dem "i-Flag", das die meisten Regular Expression Engines unterstützen. Dies kann auch direkt in dem Regulären Ausdruck angegeben werden: "(?i)". Wenn man das wieder zurück stellen will, dann wäre es "(?-i)"

Ansonsten ist die Frage immer: Braucht es reguläre Ausdrücke? Reicht evtl. hier ein myString.trim().toLowerCase().equals("meinname")?
 
Tobias ist ganz gelöscht worden - hier war eine Lösungsidee von Ihm, die sinnvoll aussieht.
Seine Idee war die Nutzung von Word Boundaries (\b). Damit kann man nach einem Wort suchen. "\\bmeinName\\b" sucht also nach dem Wort meinName.

Hier ist aber unklar, ob dies gefragt ist. Was ist mit "abc meinName xyz" - soll da meinName auch gefunden werden?

Wenn es nur um ein Trim geht, dann wäre die Nutzung von White Space (\s) eine Idee: "\\s*meinName\\s*" - da dürfen dann beliebige Whitespace Zeichen davor sein.

Generell ist auch immer aufzupassen, was für ein Aufruf man macht - es gibt halt Aufrufe, die immer den ganzen String matchen wollen, ein "\\s*meinName\\s*" ist dann gleichbedeutend zu "^\\s*meinName\\s*$". Das muss man aus meiner Sicht immer beachten.

Bleibt der Punkt Gross-/Kleinschreibung. Tobias hatte dies einfach beim Pattern.compile Aufruf als Parameter übergeben.
Das entspricht dem "i-Flag", das die meisten Regular Expression Engines unterstützen. Dies kann auch direkt in dem Regulären Ausdruck angegeben werden: "(?i)". Wenn man das wieder zurück stellen will, dann wäre es "(?-i)"

Ansonsten ist die Frage immer: Braucht es reguläre Ausdrücke? Reicht evtl. hier ein myString.trim().toLowerCase().equals("meinname")?
1. Nein, ein myString.trim().toLowerCase().equals("meinname") reicht nicht, denn an der benötigten Stelle wird eine RegEx als Übergabeparameter verlangt.

2. Es geht lediglich um Whitespaces davor oder dahinter. Ein Wert "xxx meinName yyy" kann es nicht geben.
 
1. Nein, ein myString.trim().toLowerCase().equals("meinname") reicht nicht, denn an der benötigten Stelle wird eine RegEx als Übergabeparameter verlangt.

2. Es geht lediglich um Whitespaces davor oder dahinter. Ein Wert "xxx meinName yyy" kann es nicht geben.
Dann kannst Du auch vermutlich nicht mit Pattern.compile arbeiten um da das Flag separat anzugeben. Von den diversen Lösungen wäre dann vermutlich der reguläre Ausdruck "(?i)\\s*meinName\\s*" dann das, was ich vermutlich übergeben würde - also erst das i-Flag setzen um dann den Namen mit beliebig vielen Whitespace davor oder danach zu matchen.

Tipp: Auf regex101.com kannst Du sowas auch einfach testen - und kannst da auch etwas weiter geben. Mein Vorschlag findest Du unter https://regex101.com/r/rEVwOH/1
 

Zurück
Oben