正则表达式反向条件失效

发布于 2022-01-04 22:49:30 字数 262 浏览 787 评论 4

下面是我的正则表达式,该正则表达式匹配出了如下截图第4条,是怎么回事?我使用的测试软件是Notepad++

(()?d{3}(?(1))|-)d{3}-d{4}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

倚栏听风 2022-01-07 15:12:11

也感谢这位大佬的拓展:yum:

傾城如夢未必闌珊 2022-01-07 14:58:40

楼上说的是对的,这里再补充一个概念,正则表达式是个判正的过程,他会尽可能找到符合你正则的内容,就像你这第四行,虽然带着括号无法命中,但是不带括号这个字符串就可以啊,所以就把不带括号找到了,也就是说这个在命中的时候起始位置不是 ( 而是 1。正则内部无论用平衡组还是别的什么只要是判非的逻辑加上可以为0的长度,那基本就是不生效的

多情癖 2022-01-07 14:00:03

谢谢指教,刚刚学习

妖妓 2022-01-07 11:05:50

你这个第四行匹配是没问题的,因为123-456-7890的确匹配,从123开始,没有匹配左括号,然后后面条件子串选择false,即减号,也就匹配了。

你需要复杂一点的方式去除掉这种情况。

或者,如果仅仅是你这里的文本,那就强制开头匹配也可以解决:^(()?d{3}(?(1))|-)d{3}-d{4}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文