0

下一个正则表达式表示任何 1 到 3 位数字的可选组以及 4 个非空白字符的任何可选组。

^([\d]{1,3})?(\S{4})?$

我的问题是,如果我输入 444EEE,Java 将其匹配为 44 + 4EEE,而不是首先将第一组匹配为 444 并退出,因为尾随 EEE 不是由 4 个字符组成的。那么如何避免最后一组的向左贪婪,所以倒数第二个首先消耗。是“?+”

谢谢

4

1 回答 1

2

采用

boolean foundMatch = subjectString.matches("(\\d{0,3}+)(\\S{4})");

+量词之后的额外{0,3}内容告诉正则表达式引擎不要回溯到第一组(所谓的所有格量词)。

于 2012-06-14T11:08:24.927 回答