我得到了这个正则表达式
^d+(?<=d)_?(?=d)d*
我最初的目标是匹配这些模式:
5
55
5_5
55_5
但忽略
_5
5_
_
据我所知,它从行开始匹配至少1个数字,如果它被数字包围,则需要加上下划线。很简单。
5_5
已通过,555_555
也通过了,_5
未通过,这是预期的,_
也未通过。
另外,55
也通过了,没有问题。
但是由于某些原因5
也没有通过。为什么?它是个位数,即使后面没有下划线符号也必须传递。知道为什么会这样吗?谢谢。
在https://regex101.com/上测试
原因是模式应该匹配至少2位数字。
这是由于^d+
和断言右边的另一个数字(?=d)
在你的模式中,你可以删除lookaround断言,因为你也在匹配你所断言的数字,所以它们是冗余的。
你的模式可以写成^d+_?d+
,你可以看到你必须用一个可选的下划线匹配至少2个数字。
要获得您想要的当前匹配,您可以将模式编写为:
^d+(?:_d+)?$
^
起始字符串d+
匹配1+数字(?:_d+)?
可选匹配_
和1+数字(防止末尾出现下划线)$
字符串结束
Regex演示