2016-03-06 28 views
0

所以我称一表“lu_regex”与所谓的“正则表达式”MySQL的REGEXP - 当列包含正则表达式

Select * from lu_regex; 

athedsl-\d+ 
i5[93][0-9a-fA-F]+\.versa 
5ac[a-f0-9]+.+sky 

表中包含的行1000的专栏中,各种正则表达式的语法,我在这个例子中只显示了三个。

现在我试图接受用户输入并将该输入与表中的行进行匹配。所以我正在这样做。

SELECT * FROM lu_regex where '5aca3a11.bb.sky.comr' regexp regex; 

regex 
5ac[a-f0-9]+.+sky 

1 row returned. 

我回来了我的预期,与该查询,然后我尝试这一个。

SELECT * FROM lu_regex where 'athedsl-07371.home.otenet.gr' regexp regex; 

0 rows returned. 

它应该匹配“athedsl- \ d +”,但我假设它与“\ d”有关。我甚至试图将这个添加到数据库“athedsl - \\ d +”,并且不会导致匹配。

我试图坚持一个MySQL解决方案,我做错了什么,这应该是可能的。

+1

作为第一次尝试确认/弱化你的怀疑,你可以用'athedsl- [0-9] +'替换'athedsl- \ d +'。 – cFreed

+0

它被替换时匹配'athedsl- [0-9] +'。 – Henry

+0

所以这个问题真的是你怀疑的地方:'\ d'似乎不工作。我不明白为什么,只是现在,但我会尝试找到一些东西......如果我不回来,你会知道我不幸运:) – cFreed

回答

0

我刚刚发现此链接,它看起来像一个尚未修复的错误。它在2013年

https://bugs.mysql.com/bug.php?id=70413

错误#70413 \ d证实未在REGEXP工作了MySQL查询

我认为解决方案将是是更换所有\ d与[0-9]

+1

这不是一个错误。错误报告似乎被错误地标记为已验证;正则表达式有不同的方言。 MySQL使用'[[:digit:]]''而不是'\ d'。这是记录的行为:http://dev.mysql.com/doc/refman/5.7/en/regexp.html –