Java 文档告诉我们你可以有这个贪婪的量词:
X{n} X, exactly n times
X{n,} X, at least n times
X{n,m} X, at least n but not more than m times
没有提到有X, at MOST n times
.
所以我做了一个小测试:
boolean atMost = Pattern.matches("X{,3}", "XX");
我希望atMost
是true
,因为假设下限为零是安全的。相反,我得到了一个例外:
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 0
X{,3}
^
请注意,这不是贪婪,不情愿或占有欲的事情:"X{,3}?"
和"X{,3}+"
也不起作用。
我本可以使用"X{0,3}"
来实现我正在寻找的模式,但这不是我的问题。
为什么 Java 中没有X, at MOST n times
正则表达式量词包含在 X{,n}
语法中?
在其他编程语言或正则表达式"风格"中如何?
这不是 {n,m} 问题,而是 PARSING 问题。
从左到右,{ + 数字是必须验证的可能范围
的全部内容量词,否则 { 是文字,解析继续。
此外,paser希望有一个简单的数字可用,因为范围开始与
范围结束。它不想同时抖动/允许同时 {min_default,max_default} 或{,}
在这么低的水平上,如果两者兼而有之,那就太复杂了。