正则表达式反向条件失效

monster- 发布于 2019/09/01 21:33
阅读 149
收藏 0

【领华为电脑包】容器化时代到来!跳转机分配问题终于“有救”了!>>>

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

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

加载中
0
gxhblues
gxhblues

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

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

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

monster-
monster-
谢谢指教,刚刚学习
0
建安七子
建安七子

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

monster-
monster-
也感谢这位大佬的拓展:yum:
返回顶部
顶部