【发布时间】:2021-09-08 10:37:41
【问题描述】:
我只想匹配一个字符串中的911 或1911,其前面或结尾有任意数量的* 或#。
我的正则表达式:
[^0-9]\*[1-9]{3,4}[^0-9]*
下面的测试代码在我期望它为假时返回真:
select Digits
from (select '*11911#' as Digits) A
where Digits rlike '[^0-9]\*[1-9]{3,4}[^0-9]*'
我做错了什么?
【问题讨论】:
-
我看不出您的正则表达式如何符合您的要求。它甚至没有
#。 -
我建议阅读正则表达式语法并使用regex101 之类的工具来解释当前的正则表达式,并可能为给定的用例创建一个正确的正则表达式。
-
如果我没看错,正则表达式看起来像
[*#]*1?911[*#]*。 -
一点test case on regex101 到@shmosel 提出的解决方案(我冒昧地包括了字符串开始和字符串结束验证)。
-
你不能不做
INSTR (col, '911')吗?你必须使用正则表达式吗?您的要求看起来很简单。