将参数传递给SQL正则表达式

时间:2013-12-21 15:11:36

标签: mysql sql regex

我想知道是否可以将参数传递给正则表达式,就好像它们是MySQL REGEXP函数中的文字字符串一样。我想做的是以下几点:

SELECT ? REGEXP CONCAT('string', ?, 'string')

现在当我将一个点(“。”)传递给第二个参数时,它会自动匹配任何字符,如预期的那样。这意味着像“stringastring”和“stringbstring”这样的字符串与模式匹配。我想知道是否有可能只匹配文字点,以便在这种情况下只匹配“string.string”。有没有办法用MySQL正则表达式做这样的事情,这不涉及显式转义参数(这首先违背了传递参数的目的)?

3 个答案:

答案 0 :(得分:0)

尝试放置括号,如:

SELECT ? REGEXP CONCAT('string', '[.]', 'string')

见这里:http://sqlfiddle.com/#!2/a3059/1

答案 1 :(得分:0)

如果我理解你的问题,我认为你正在寻找这个:

SELECT ? REGEXP CONCAT('string', REPLACE(?, '.', '[.]'), 'string')

使用REPLACE函数,任何点总是转义为[。],但所有其他特殊字符都按字面顺序传递。

答案 2 :(得分:0)

对于那些使用PHP并寻找与此相关的答案的人,我在stackover here中找到了与此相关的答案,尽管不是直接用于MySQL查询。我们的想法是使用preg_quote()来转义regexp元字符。但在你的情况下,你必须将它两次应用到你的参数。

$param = preg_quote(preg_quote($param))

然后

SELECT ? REGEXP CONCAT('string', $param, 'string')

阅读此article和评论以了解更多信息