我需要 Regex 进行 SQL 搜索,例如:
"SELECT * FROM `words` WHERE `searchWord` REGEXP '$queryWord(\d{1,4})';"
除了,我需要包括'='
在$queryWord
和(\d{1,4})
部分之间,不太确定如何做到这一点?
我似乎无法正常\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 注入攻击。有关更多信息,请参见此处和许多其他地方。
你只需要转义'='。这应该有效:
"SELECT * FROM `words` WHERE `searchWord` REGEXP '$queryWord\=\d{1,4}'";
另请注意,您的号码周围缺少捕获组。我们正在检查它们,而不是退回它们。
$query="SELECT * FROM `words` WHERE `searchWord` REGEXP '".$queryWord."\=\d{1,4}';"
这会奏效。
您需要小心,并确保您的 $queryWord 只有字母,没有点等特殊字符。