MySQL正则表达式行为

时间:2015-10-30 10:25:57

标签: mysql regex

我有一个带有列路径的表access_rules。 我在表格中添加了一行:

INSERT INTO access_rules (path) VALUES ('/user/search/*'), ('/user'), ('/someotherpath')

现在,我执行了一个查询:

SELECT * FROM `access_rules` where '/user/search/ddd' regexp path 

我想返回/ user / search / *,但查询会同时返回'/user/search/*''/user'。 谁能告诉我为什么会那样?

1 个答案:

答案 0 :(得分:0)

/user^.*/useruser.*$相同。那就是任何可以在/user之前或之后存在,以便匹配。

同时,/user/search/*匹配/user/search//////user/search。可能不是你想要的。您可能希望.*代替*

因为您似乎只有'前缀'匹配,我建议你改为

WHERE '...' LIKE CONCAT(path, '%')

如果/user应该是'确切的'匹配,然后那不会起作用。在这种情况下,切换到

INSERT INTO access_rules (path)
    VALUES ('/user/search/%'),  -- note the change here
           ('/user'),
           ('/someotherpath')
SELECT * FROM `access_rules` where '/user/search/ddd'
     LIKE path   -- note LIKE, not REGEXP