Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 群正则表达式的左向greedyness_Java_Regex_Regex Greedy - Fatal编程技术网

Java 群正则表达式的左向greedyness

Java 群正则表达式的左向greedyness,java,regex,regex-greedy,Java,Regex,Regex Greedy,下一个正则表达式表示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

下一个正则表达式表示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}
量词之后的额外
+
告诉正则表达式引擎不要回溯到第一个组(一个所谓的组)。

向组添加
,因为我在OP问题中看到它们是可选的,这里有一个术语点值得指出:问题不在于贪婪(确定在中考虑哪些顺序匹配)但是关于进行某些匹配的问题根本不被考虑。@Pshemo:第一组是可选的,因为它允许
0
位。但是,你是对的-如果字符串是
1234
,这个正则表达式就不会通过。一个问题:
1234
是有效的匹配吗?空字符串有效吗?规则还没有很好的定义。