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

Mysql 将参数传递给SQL正则表达式,mysql,sql,regex,Mysql,Sql,Regex,我想知道是否可以将参数传递给正则表达式,就像它们是MySQL REGEXP函数中的文本字符串一样。我想做的是: SELECT ? REGEXP CONCAT('string', ?, 'string') 现在,当我将一个点(“.”)传递给第二个参数时,它将自动匹配任何字符,正如预期的那样。这意味着像“stringastring”和“stringbstring”这样的字符串与模式匹配。我想知道是否可以只匹配文字点,以便在本例中只匹配“string.string”。有没有一种方法可以对MySQL正

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

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

现在,当我将一个点(“.”)传递给第二个参数时,它将自动匹配任何字符,正如预期的那样。这意味着像“stringastring”和“stringbstring”这样的字符串与模式匹配。我想知道是否可以只匹配文字点,以便在本例中只匹配“string.string”。有没有一种方法可以对MySQL正则表达式执行这种操作,而不需要显式地转义参数(这首先会破坏传递参数的目的)?

尝试使用括号,如:

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

请参见此处:

如果我正确理解您的问题,我认为您正在寻找以下信息:

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

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

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

$param=preg_quote(preg_quote($param))

然后

选择?REGEXP CONCAT('string',$param,'string')


请阅读本文和评论以了解更多内容

坦率地说,这并不能回答问题。这种方法也不适用,因为我不知道要传递的参数的长度。我认为如果不显式转义特殊字符,就不能使用正则表达式。请参阅我放置的链接。不,我打算将参数传递给正则表达式,以便它将它们作为文本进行解释。如果该点是^或一系列字符。。像您建议的那样的hack不适用。@user2180613但是为什么您需要正则表达式而不仅仅是LIKE或a=?因为用例需要正则表达式?这也是一个相当复杂的问题。@user2180613好的,这两个字符串是两个正则表达式,只是参数必须按字面匹配?