我只想将字符串中的911
或1911
与任何数量的前序或后序*
或#
进行匹配。
我的Regex:
[^0-9]*[1-9]{3,4}[^0-9]*
下面的测试代码在我预期为false时返回true:
select Digits
from (select '*11911#' as Digits) A
where Digits rlike '[^0-9]*[1-9]{3,4}[^0-9]*'
我做错了什么?
BTW在单元中转义时,应使用双反斜杠:\*
或[*]
,以避免不可预测的行为(有时单反斜杠用作转义,有时不用作,双反斜杠在单元中始终用作转义(。
此'[^0-9]\*[1-9]{3,4}[^0-9]*'
-不匹配,*正确转义,并且字符串中在*之前没有任何内容。
让我们删除\*
之前的[^0-9],然后再次检查:
这不返回任何行:
select Digits
from (select '*11911#' as Digits) A
where Digits rlike '\*[1-9]{3,4}[^0-9]'
此外,此'\*[1-9]{3,4}[^0-9]+'
与不匹配
这个匹配:
'\*[1-9]{3,4}[^0-9]*'
因为末尾的*
表示0次或更多次,所以它完全匹配:一行中有4[1-9]和零个非数字。
在regex101上,它的工作原理相同:last*使其匹配