mysql 正则表达式搜索中的点字符否定

Dot character negation in mysql regex search

我想在 mysql 搜索中使用一个正则表达式来计算一个字符串,而不是后跟一个点的相同字符串。特点。 例如,我想匹配产品代码 3.4.5.1 但不匹配 3.4.5.1.4 我有一个使用 double like 的解决方法:

SELECT *  from mytable  where myclolumn like '%3.4.5.1%' AND mycolumn NOT like '%3.4.5.1.%'....

不是一个非常优雅的解决方案。 所以我试图使用 REGEXP_LIKE(mycolumn,'(3.4.5.1)[^\.]')

事实上,我已经测试了该模式并且在 php 甚至在线上都运行良好:https://regexr.com/66olc 但似乎正则表达式在 MYSQL 中以自己的方式工作,因为我得到一个空的搜索结果。 我做错了什么?

您可以使用

([^0-9]|^)3\.4\.5\.1([^.0-9]|$)

参见regex demo详情:

  • ([^0-9]|^) - 非数字字符 ([^0-9]) 或 (|) 字符串开头 (^)
  • 3\.4\.5\.1 - 3.4.5.1 文字字符串(正则表达式中的点必须用文字反斜杠转义以匹配 . 字符,否则,. 匹配任何单个字符)
  • ([^.0-9]|$) - 除 . 和数字 ([^.0-9]) 或 (|) 字符串结尾 ($) 以外的任何字符。

“由点分隔的数字组”:

([0-9]+[.])+[0-9]+

解释:

[0-9]+  -- 1 or more digit; you could change "+" to "{1,2}" to say "1 or 2"
[.]     -- a single dot; this would work, too:  \.
(...)+  -- 1 or more of what's between the parens