2017-02-13 55 views
0

我的查询:为什么不这项工作正则表达式的MySQL?

SELECT * FROM `tblforummessages` 
WHERE `FMMessage` REGEXP '^[a-zA-Z0-9 :,.!?éáőúöüóűíÉÁŐÚÖÜÓŰÍ()\t\n\r\-\"\„]{9,}$' 

我的文字是:

“尊敬的玛丽埃塔想告知的血债票款的 (13件)总池,所有的桑拿(4) 你可以使用。我想提请你注意血液债务人门票任何一天星期日除外 可用于2009年12月23日,直到“

在线验证此说文通为这种表达,但不要在SQL 工作中,我试图用

CAST(`FMMessage` AS CHAR CHARACTER SET utf8) COLLATE utf8_general_ci 

,但没有帮助。

+0

你的正则表达式中包含\“是一个双引号的字符串您的查询是跑了吗?如果有任何伤害它逃脱双引号,并可能搞砸了你的正则表达式 –

+0

你有正确的,\”挡住了我的查询,但我两者都需要按类型过滤(“和”)比我该怎么办呢?不知道 –

+0

'”'是确定的,但的'-'必须在括号表达式的结束。和UNESCAP。不知道的空格。可尝试'^ [A-ZA-Z0-9 :,éáőúöüóűíÉÁŐÚÖÜÓŰÍ()\ t \ n \ r”“ - !] {9} $' –

回答

0

MySQL不支持REGEXP多字节字符。

检查整个FMMessage也伤害了至少9个字符,使用CHAR_LENGTH(FMMessage) >= 9。目前还不清楚是什么REGEXP其余试图做到这一点。你似乎有在文本中的所有正常韦伯斯特可能的字符,但不包括某些(不是全部)其他欧洲文字。 Angol是允许的,甚至一些德国由于双S的。

假设编码是UTF-8(或utf8mb4)可能将是可能做

HEX(FMMessage) REGEXP '...' 

当正则表达式是|分离的2-和4-字符的十六进制对一个长字符串。整个常规表达式将大约300个字符长。

相关问题