2015-10-30 73 views
1

我有一个表access_rules与列路径。 我在表中添加一行:MySQL的正则表达式行为

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

现在,我执行查询:

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

我想回/用户/搜索/ *,但查询同时返回'/user/search/*''/user'。 有人可以告诉我为什么这样吗?

+0

我想如果你在'path'中有'/ search',它也会返回。 – hjpotter92

回答

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 
+0

警告:我没有检查该代码;希望它会给你足够的想法。 –

+0

其实SELECT * FROM'access_rules'其中'/ user/search/ddd'LIKE路径是我想要的,谢谢 – Harikrishnan