-1

我需要 Regex 进行 SQL 搜索,例如:

"SELECT * FROM `words` WHERE `searchWord` REGEXP '$queryWord(\d{1,4})';"

除了,我需要包括'='$queryWord(\d{1,4})部分之间,不太确定如何做到这一点?

4

3 回答 3

3

我似乎无法正常\d工作,所以我改用了 POSIX [:digit:]。尝试这个:

SELECT * FROM `words` WHERE searchWord REGEXP '$queryWord=[[:digit:]]{1,4}'

等号不需要特殊处理。在我的测试中,它可以在有和没有转义的情况下工作。

你也可以这样做:

SELECT * FROM `words` WHERE searchWord REGEXP '$queryWord=[0-9]{1,4}'

最后,请注意不要将字符串值插入到您的查询中。这会使您容易受到 SQL 注入攻击。有关更多信息,请参见此处和许多其他地方。

于 2013-05-17T13:24:52.277 回答
3

你只需要转义'='。这应该有效:

"SELECT * FROM `words` WHERE `searchWord` REGEXP '$queryWord\=\d{1,4}'";

另请注意,您的号码周围缺少捕获组。我们正在检查它们,而不是退回它们。

于 2013-05-17T13:23:05.187 回答
1
$query="SELECT * FROM `words` WHERE `searchWord` REGEXP '".$queryWord."\=\d{1,4}';"

这会奏效。

您需要小心,并确保您的 $queryWord 只有字母,没有点等特殊字符。

于 2013-05-17T13:25:24.847 回答