正则表达式反向条件失效
下面是我的正则表达式,该正则表达式匹配出了如下截图第4条,是怎么回事?我使用的测试软件是Notepad++
(()?d{3}(?(1))|-)d{3}-d{4}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
下面是我的正则表达式,该正则表达式匹配出了如下截图第4条,是怎么回事?我使用的测试软件是Notepad++
(()?d{3}(?(1))|-)d{3}-d{4}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
也感谢这位大佬的拓展:yum:
楼上说的是对的,这里再补充一个概念,正则表达式是个判正的过程,他会尽可能找到符合你正则的内容,就像你这第四行,虽然带着括号无法命中,但是不带括号这个字符串就可以啊,所以就把不带括号找到了,也就是说这个在命中的时候起始位置不是 ( 而是 1。正则内部无论用平衡组还是别的什么只要是判非的逻辑加上可以为0的长度,那基本就是不生效的
谢谢指教,刚刚学习
你这个第四行匹配是没问题的,因为123-456-7890的确匹配,从123开始,没有匹配左括号,然后后面条件子串选择false,即减号,也就匹配了。
你需要复杂一点的方式去除掉这种情况。
或者,如果仅仅是你这里的文本,那就强制开头匹配也可以解决:^(()?d{3}(?(1))|-)d{3}-d{4}