MySQL REGEXP不匹配字符串

时间:2013-01-12 07:24:06

标签: mysql regex mysqli

我正在进行MySQL查询,我需要在长字符串中匹配两个字符串,但无法使其工作。这就是我尝试过的。

SELECT * FROM mytable WHERE (mycol REGEXP '/~20\|2~/' AND mycol REGEXP '/~14\|1~/')

这是字符串的样子

~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~

我想选择包含这两个子串的所有行

~20|2~ AND ~14|1~

我做错了什么?

2 个答案:

答案 0 :(得分:1)

请检查一下,thsi只选择包含两个字符串的行。

  • 编辑:

原因在于您的原始正则表达式不起作用:

Because MySQL uses the C escape syntax in strings (for example, “\n” to represent the newline character), you must double any “\” that you use in your REGEXP strings.

查询:

SELECT * FROM vendor 
WHERE (vname REGEXP '~20\\|2~' 
AND vname REGEXP '~14\\|1~')
;

查询:请注意,我使用了与您不同的表/样本数据。但复制了您的数据行并进行了一些更改以触发正确的regex

示例数据:

| VID |                                              VNAME |
------------------------------------------------------------
|   1 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
|   2 |               ~20|2~14|1397|1|0:0:0:0||~17|1~18|1~ |
|   3 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
|   4 |       ~20|2~1|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |

查询:

SELECT * FROM vendor 
WHERE (vname REGEXP '~20\[|]2~' 
AND vname REGEXP '~14\[|]1~')
;

结果:

| VID |                                              VNAME |
------------------------------------------------------------
|   1 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
|   3 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |

答案 1 :(得分:0)

你试过这个吗?

SELECT * FROM mytable WHERE (mycol REGEXP '~20\|2~' AND mycol REGEXP '~14\|1~')

SQL Fiddle