mysqli的正则表达式总是返回1

时间:2015-06-12 15:31:45

标签: regex mysqli

我试图通过检查其中一个字段中的json是否包含特定ID来从我的数据库中获取行。

Example: col(kats): [2,4,7,9]

我正在尝试使用以下查询

SELECT column FROM table WHERE column REGEXP '(\[|\,)1(\]|\,)'

问题:MySQL为表中的每一行返回1。 在此先感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

MySQL要求任何文字反斜杠\字符(REGEXP字符串中的字面值作为以下[]的转义字符)才能自行转义。因此,您必须将[]双倍转义为\\[\\]

From the docs:

  

因为MySQL在字符串中使用C转义语法(例如,“\ n”表示换行符),所以必须将在REGEXP字符串中使用的任何“\”加倍。

除了逗号,不需要转义外,其余模式基本上都是正确的。

1不匹配:

> SELECT '[2,4,7,9]' REGEXP '(\\[|,)1(\\]|,)';
+--------------------------------------+
| '[2,4,7,9]' REGEXP '(\\[|,)1(\\]|,)' |
+--------------------------------------+
|                                    0 |
+--------------------------------------+
1 row in set (0.00 sec)

但是2匹配

> SELECT '[2,4,7,9]' REGEXP '(\\[|,)2(\\]|,)';
+--------------------------------------+
| '[2,4,7,9]' REGEXP '(\\[|,)2(\\]|,)' |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
1 row in set (0.00 sec)