我有这个大梁
^\d+(?<=\d)_?(?=\d)\d*我最初的目标是匹配这些模式:
5555_555_5但忽略
_55__据我所知,如果它被数字包围,它至少匹配一行开头的1位数,如果它被数字包围,则匹配anderscore。很简单。所以,
5_5通过了,555_555也通过了,_5没有通过,这是预料中的,_也没有通过。此外,还通过了55,这是很好的。
但出于某种原因,5也没有通过。为什么?它是个位数,即使以后没有下划线,它也必须通过。知道为什么会发生这种事吗?谢谢。
发布于 2022-05-08 08:08:17
原因是因为模式应该至少匹配2位数字。
这是由于^\d+和向右(?=\d)断言另一个数字。
在您的模式中,您可以删除查找断言,因为您还匹配要断言的数字,因此它们是多余的。
您的模式可以编写为^\d+_?\d+,您可以看到必须至少匹配两个数字与一个可选的下划线。
要获得所需的当前匹配,可以将模式编写为:
^\d+(?:_\d+)?$解释
^开始\d+匹配1+数字(?:_\d+)?还可以选择匹配_和1+数字(以防止末尾出现下划线)$末端https://stackoverflow.com/questions/72159089
复制相似问题