MySQL查询使用REGEXP找不到匹配的字符串

时间:2016-08-25 13:21:02

标签: mysql regex

我正在使用MySQL 5.5

我有一个名为nutritions的表,其列serving_data的数据类型为text

serving_data列中的某些值如下:

[{"label":"1 3\/4 cups","unit":"3\/4 cups"},{"label":"1 cups","unit":"3\/4 cups"},{"label":"1 container (7 cups ea.)","unit":"3\/4 cups"}]

现在,我想查找包含serving_data的记录,例如1 3\/4 cups

为此,我提出了一个问题,

SELECT id,`name`,`nutrition_data`,`serving_data`
FROM `nutritions` WHERE serving_data REGEXP '(\d\s\\\D\d\scup)+';

但似乎行不通。

我也试过

SELECT id,`name`,`nutrition_data`,`serving_data`
FROM `nutritions` WHERE serving_data REGEXP '/(\d\s\\\D\d\scup)+/g';

如果我在http://regexr.com/中使用相同的模式,那么它似乎匹配。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

请注意,在MySQL正则表达式中,您不能使用\d\D\s等速记类,请将其替换为[0-9][^0-9]和{{ 1}}分别。

您可以使用

[[:space:]]

请参阅regex demo(请注意,一般来说,regex101.com不支持MySQL正则表达式,但PCRE选项支持POSIX字符类,如REGEXP '[0-9]+[[:space:]][0-9]+\\\\/[0-9]+[[:space:]]+cup' [:digit:],所以它仅用于此处的演示,而不是用于MySQL [:space:])的证明。

模式详情

  • REGEXP - 一位或多位
  • [0-9]+ - 空白
  • [[:space:]] - 一位或多位
  • [0-9]+ - 文字\\\\/字符序列
  • \/ - 一个或多个数字,一个或多个空格,[0-9]+[[:space:]]+cup

请注意,您可以使用单词边界精确单词cup,在其后添加cup图案以匹配[[:>:]]作为整个单词。