为什么在“X {,n}”语法中不包含Java中包含的“X,最多n次”正则表达量词?

时间:2014-02-27 20:22:50

标签: java regex quantifiers

Java docs告诉我们你可以拥有这个贪婪的quantifiers

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");

我希望atMosttrue,因为将下限假设为零是安全的。 相反,我有一个例外:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 0
X{,3}
^

请注意,贪婪不情愿占有"X{,3}?""X{,3}+"也不是不行。

我本可以使用"X{0,3}"来实现我正在寻找的模式,但这不是我的问题。


为什么X, at MOST n times语法中的X{,n}正则表达式量词不包含在{{1}}

在其他编程语言或正则表达式“风味”中它是如何形成的?

1 个答案:

答案 0 :(得分:2)

它不是{n,m}问题,而是 PARSING 问题。

从左到右,{+数字必须在可能的范围内进行验证 量词,否则{是文字和解析继续。

此外,paser想要​​一个简单的数字作为范围开始与之比较 范围结束。它不想同时抖动/允许{min_default,max_default}或{,}

在这个低水平允许两者都太复杂。