如果符号不存在, LookAround或默认正则表达式



我得到了这个正则表达式

^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演示

相关内容

  • 没有找到相关文章

最新更新