REGEXP 没有显示正确的结果?

Mar*_*arr 2 mysql regex

我在名称列中有:

3 boxes of frogs
7 boxes of frogs
48 boxes of frogs
Run Code Online (Sandbox Code Playgroud)

当我执行:

SELECT name FROM items WHERE name REGEXP "[^1-5] boxes"
Run Code Online (Sandbox Code Playgroud)

……结果是:

SELECT name FROM items WHERE name REGEXP "[^1-5] boxes"
Run Code Online (Sandbox Code Playgroud)

当我尝试:

SELECT name FROM items WHERE name REGEXP "[^1-50] boxes"
Run Code Online (Sandbox Code Playgroud)

SELECT name FROM items WHERE name REGEXP "[^1-48] boxes"
Run Code Online (Sandbox Code Playgroud)

……结果是:

7 boxes of frogs
48 boxes of frogs
Run Code Online (Sandbox Code Playgroud)

SELECT name FROM items WHERE name REGEXP "[^1-50] boxes"
Run Code Online (Sandbox Code Playgroud)

...分别。

为什么“3盒青蛙”不REGEXP "[^1-48] boxes和其他人一起表演。结果REGEXP "[^1-48] boxesREGEXP "[^1-50] boxes是太奇怪了。有人可以解释为什么吗?

Kár*_*agy 7

正则表达式不是那样工作的。您不能指定数字范围。

[]括号指定要匹配的字符集。^里面的字符 []意味着否定 = 指定字符集之外的任何内容。我假设您想指示字符串的开头,该字符串也标有^但在[]部分之外。

  • [^1-5] 表示不是 1 到 5 之间的数字的任何字符
  • [^1-50] 表示不是 1 到 5 之间的数字且不是 0 的任何字符

更多详情:

[^1-5] 盒

7 boxes of frogs 匹配,因为 7 不是 1 到 5 之间的数字后跟空格和单词框

48 boxes of frogs 匹配,因为 4 不匹配(常规机器不在第一步中)-> 8 不是 1 和 5 之间的数字后跟空格和实际匹配的单词框: 8 boxes of frogs

[^1-48] 盒

不匹配,48 boxes of frogs因为规则现在指定了 (1,2,3,4,8) 集中的字符,并且字符串在此检查中失败。

修复您的正则表达式

在您的情况下,您可能想使用 name regexp '^[0-9]+ boxes of frog'