我正在使用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/中使用相同的模式,那么它似乎匹配。
任何人都可以帮助我吗?
答案 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
图案以匹配[[:>:]]
作为整个单词。