-3

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

我希望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 timesJava 的X{,n}语法中不包含正则表达式量词?

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

4

1 回答 1

3

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

从左到右,{ + number 是所有必须为可能的范围
量词验证的内容,否则 { 是文字并且解析继续。

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

在这么低的水平上,这太复杂了,不能同时允许两者。

于 2014-02-27T21:09:28.837 回答