| 

.NET C# Java Javascript Exception

1
Hallo,

ich benötige mal Hilfe von einem Regex-Experten. Ich versuche, in MySQL eine Textspalte nach dem Wort
Grüßen
zu durchsuchen. Nachdem ich vorher aber nicht weiß, ob die Umlaute ersetzt wurden, dachte ich daran, einen regulären Ausdruck daraus zu basteln. Ich hänge aber im Moment an den Umlauten. Mein Ausdruck bislang lautet dazu
RLIKE 'gr[ü|ue]+[ß|ss]+en'

Nur habe ich damit das Problem, dass auch "grußen" oder gar "grusen" gefunden wird. Gibt es eine Möglichkeit, über RLIKE die Abfrage so zu gestalten, dass entweder Umlaut oder die Ersetzung vorkommt?

Edit: mittels
RLIKE '[g]+[r]+[ü|ue]+[ß|ss]+[e]+[n]+'

scheint das richtige Ergebnis zu kommen, aber kann man das nicht irgendwie einfacher ausdrücken?
01.06.2015
muffi 1,4k 1 9
muffi 1,4k 1 9
2 Antworten
2
Ohne es genauer geprüft zu haben: Ersetze in deinem ersten Vorschlag die eckigen durch runde Klammern. Denn in eckigen Klammern gibst du nur eine Auswahl möglicher Zeichen an.
Also:
gr(ü|ue)(ß|ss)en

oder evtl. auch:
(grüßen|gruessen)
01.06.2015
jsc 289 1 7
Das funktioniert leider nicht, obwohl es eigentlich mit runden Klammern funktionieren sollte. Merkwürdig...
muffi 01.06.2015
Dann ist das vielleicht ein spezielles Verhalten der regular Expressions von MySql? Da kann ich dann leider auch nichts weiter zu sagen. Sorry.
jsc 01.06.2015
Ich habe das trotzdem nochmal angepackt. Ich muss mich vorhin irgendwie vertippt haben, denn die Version mit den runten Klammmern läuft. Von daher: grüner Haken :-)
muffi 01.06.2015
0
Hallo zusammen,
RLIKE ist so das langsamste was du tun kannst. Es wäre besser wenn du ohne RegEx arbeitest. Also zum Beispiel so was:
Feld LIKE '%gruessen%' or Feld LIKE '%grüßen%'

Ist aber auch nicht Performant.

Ansonsten sind die Ausdrücke schon okay.
(grüßen|grueßen|grüssen|gruessen|Grüßen|Grueßen|Grüssen|Gruessen)
.

Eine mögliche Fehlerquelle hierbei kann dann noch die Zeichencodierung sein. Beispiel wenn deine Abfrage in ISO-8859 geschrieben die Zeichencodierung im Feld aber UTF-8 ist kannst du keinen Match erzeugen. Du würdest dann mit der Falschen Codierung suchen. Entscheidend ist hier aber was im Feld drin ist, nicht was dran steht.

Gruß Jens
01.06.2015
XJenso 322 7
Dass Rlike lahm ist, ist mir bewusst. Ich generiere meinen SQL-String ja dynamisch zur Laufzeit, und dein Beispiel mit dem Like mache ich ja im Moment so. Nur damit erwische ich halt nicht, wenn im Feld 'grüssen' drin steht. Da ist mein Problem.
muffi 01.06.2015

Stelle deine Mysql-Frage jetzt!