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");
我希望atMost
为true
,因为将下限假设为零是安全的。
相反,我有一个例外:
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}}
在其他编程语言或正则表达式“风味”中它是如何形成的?
答案 0 :(得分:2)
它不是{n,m}问题,而是 PARSING 问题。
从左到右,{+数字必须在可能的范围内进行验证 量词,否则{是文字和解析继续。
此外,paser想要一个简单的数字作为范围开始与之比较
范围结束。它不想同时抖动/允许{min_default,max_default}或{,}
在这个低水平允许两者都太复杂。