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
我想在 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