下一个正则表达式表示任何 1 到 3 位数字的可选组以及 4 个非空白字符的任何可选组。
^([\d]{1,3})?(\S{4})?$
我的问题是,如果我输入 444EEE,Java 将其匹配为 44 + 4EEE,而不是首先将第一组匹配为 444 并退出,因为尾随 EEE 不是由 4 个字符组成的。那么如何避免最后一组的向左贪婪,所以倒数第二个首先消耗。是“?+”
谢谢
下一个正则表达式表示任何 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}
内容告诉正则表达式引擎不要回溯到第一组(所谓的所有格量词)。