下一个正则表达式表示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)。

09-06 02:50