REGEXP in MySQL
Felix Riesterer
- datenbank
Liebe Mitleser,
das hat mich jetzt einiges an Zeit gekostet, daher dachte ich, ich stelle das hier einmal zur Diskussion. Folgende zwei regulären Ausdrücke sind offensichtlich und entgegen meiner Erfahrung mit PHP nicht kongruent:
[1]+. (matcht 'L1.8a' in MySQL)
und
[2]+. (matcht NICHT 'L1.8a' in MySQL)
Liebe Grüße,
Felix Riesterer.
Hi,
[1]+. (matcht 'L1.8a' in MySQL)
und
[2]+. (matcht NICHT 'L1.8a' in MySQL)
bist Du sicher, dass dies die verwendete RegExp ist - oder ist das doch der String, der nach Auflösung des Escapings zu einer RegExp wird?
Cheatah
Hi!
[1]+. (matcht NICHT 'L1.8a' in MySQL)
bist Du sicher, dass dies die verwendete RegExp ist - oder ist das doch der String, der nach Auflösung des Escapings zu einer RegExp wird?
PHP löst weder \d noch . auf (Strings - Double quoted). MySQL würde den \ wegwerfen (MySQL-Strings), der String '[2]+.' würde also zu [3]+. werden und erst dann als RegExp ausgewertet werden. Aber: https://forum.selfhtml.org/?t=197651&m=1325972.
Lo!
Lieber Cheatah,
[1]+. (matcht NICHT 'L1.8a' in MySQL)
bist Du sicher, dass dies die verwendete RegExp ist - oder ist das doch der String, der nach Auflösung des Escapings zu einer RegExp wird?
AHA!! Dann sollte ich mir einmal die Frage nach dem Escapen nocheinmal genauer stellen... Zumindest den Punkt könnte ich zu einem echten Punkt machen, wenn schon die Zeichenklasse mit :digit: hätte lauten müssen.
Vielen Dank für den Denkanstoß! Meine MySQL-Kenntnisse sind halt noch recht neu. ;-)
Liebe Grüße,
Felix Riesterer.
a-zA-Z\d ↩︎
Hi!
Folgende zwei regulären Ausdrücke sind offensichtlich und entgegen meiner Erfahrung mit PHP nicht kongruent:
Welches System in PHP meinst du, Perl- oder POSIX-kompatibel?
[1]+. (matcht 'L1.8a' in MySQL)
und
[2]+. (matcht NICHT 'L1.8a' in MySQL)
Die POSIX-Version, die in MySQL verwendet wird, kennt \d und Konsorten als Zeichenklasse nicht, da heißt es [:digit:]. Ist aber auch alles dokumentiert.
Lo!