所以,以某种方式(玩弄),我发现自己有一个正则表达式,比如\d{1}{2}
.
从逻辑上讲,对我来说,这应该意味着:
(一个数字恰好一次)恰好两次,即一个数字正好两次。
但事实上,它似乎只意味着“一个数字恰好一次”(因此忽略了{2}
).
String regex = "^\\d{1}{2}$"; // ^$ to make those not familiar with 'matches' happy
System.out.println("1".matches(regex)); // true
System.out.println("12".matches(regex)); // false
使用可以看到类似的结果{n}{m,n}
或类似的。
为什么会发生这种情况?它是否在正则表达式/Java 文档中明确说明,或者只是 Java 开发人员即时做出的决定,或者可能是一个错误?
或者它实际上没有被忽视并且实际上意味着完全不同的东西?
这并不重要,但它不是全面的正则表达式行为,Rubular http://www.rubular.com/r/eefKxje4nf做我所期望的。
注意 - 标题主要是为了让那些想知道它是如何工作的(而不是为什么)的用户方便搜索。
IEEE 标准 1003.1 http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html says:
多个相邻重复符号(“*”和间隔)的行为会产生未定义的结果。
所以每个实现都可以随心所欲,只是不要依赖任何特定的东西......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)