下一个正则表达式表示1到3位数字的任意可选组以及4个非空白字符的任意可选组。
^([\d]{1,3})?(\S{4})?$
我的问题是,如果输入444EEE,Java会将其匹配为44 + 4EEE,而不是首先将第一个组匹配为444并退出,因为尾随的EEE不是由4个字符组成。因此,如何避免最后一组的向左贪婪,所以倒数第二个首先消耗。是“?+”
谢谢
最佳答案
采用
boolean foundMatch = subjectString.matches("(\\d{0,3}+)(\\S{4})");
+
量词后的多余{0,3}
告诉正则表达式引擎不要回溯到第一组(所谓的possessive quantifier)。