所以,某种方式(玩弄),我发现自己有一个正则表达式 \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
Run Code Online (Sandbox Code Playgroud)
使用可以看到类似的结果 {n}{m,n}或类似.
为什么会这样?它是在regex/Java文档中明确说明的,还是只是Java开发人员即时做出的决定,还是它可能是一个bug?
或者它实际上没有被忽略,它实际上完全意味着什么呢?
并不重要,但它不是全面的正则表达式行为,Rubular做了我所期望的.
注意 - 标题主要用于想要了解其工作原理(不是为什么)的用户的可搜索性.
例:
/(?:美孚){0}酒吧/
我在另一个答案中看到了类似的东西.起初我想"应该是什么",然后,"好的可能有意义,背后有一种负面的看法",所以Foo以前不允许bar,但这不起作用.
你可以在Regexr上看到这个:它只匹配,bar但它也与barin 匹配Foobar.
当我为行的开头添加锚点时:
/^(?:Foo){0}bar/
Run Code Online (Sandbox Code Playgroud)
它表现得像我期待的那样.它只是相匹配bar,而不是bar在Foobar.
但这与我只使用/bar/或使用的行为完全相同/^bar/.
量词{0}只是一种无用的副作用,还是真的有用的行为呢?