我试图让我的正则表达式在MySQL中工作,但它';它不工作了

我试图让我的正则表达式在MySQL中工作,但它';它不工作了,mysql,regex,Mysql,Regex,我的sql数据库中存储了一个字符串 rahul得分-[99 58 21]-分 我有它的正则表达式 ^rahul得分-\[\d{2}]*(?:99 | 58 | 21)[\d{2}]*\]-分$ 当我在Javascript中测试它时,它返回true,但如果我在MySQL中使用 SELECT * from tablexyz WHERE columnabc RLIKE '^rahul-scored-\[[ \d{2}]* (?:99|58|21) [\d{2} ]*\]-marks$' 它不返

我的sql数据库中存储了一个字符串

rahul得分-[99 58 21]-分

我有它的正则表达式

^rahul得分-\[\d{2}]*(?:99 | 58 | 21)[\d{2}]*\]-分$

当我在Javascript中测试它时,它返回true,但如果我在MySQL中使用

SELECT * 
from tablexyz 
WHERE columnabc RLIKE '^rahul-scored-\[[ \d{2}]* (?:99|58|21) [\d{2} ]*\]-marks$' 
它不返回任何行


有没有办法在不改变正则表达式的含义和意义的情况下为MySQL编写完全相同的正则表达式。

我想这会满足您的要求:

WHERE columnabc RLIKE '^rahul-scored-\\[( [0-9]{2})* \\]-marks$'
是一把数字小提琴。

您可以使用

REGEXP '^rahul-scored-\\[( (99|58|21))+ \\]-marks$'

详细信息

  • ^rahul评分-\\[/code>-字符串开头的文本
    rahul评分-[
    文本
  • ((99 | 58 | 21))+
    -一个或多个空格的重复,然后是
    99
    58
    21
  • \\]-标记$
    -
    ]-在字符串末尾标记
    字符串
关注点:

  • 正则表达式转义(如与文本
    \[
    匹配的
    \[
    )必须作为
    \\[
    转义,因为模式是使用字符串文本定义的
  • 如果使用早于8的MySQL版本,则不能使用非捕获组

请解释您希望正则表达式做什么。它正在使用MySQL不支持的反向引用。您需要更改它的含义,因为
[\d{2}]*
没有做您认为它是什么。请尝试
“^rahul评分-\\[(*[0-9]{2})+*]-标记$'
,请参见我想这样做。我想检查给定字符串是否只包含这三个数字或其中一个。只有MySQL版本8处理该regexp语法。您使用的是哪个版本?我尝试了,但它对每两位数字都有效。我想专门检查这三个数字中是否存在任何一个.当我改变[和]到\]@VipinGautam(如上所述)时,它能工作吗?