Java正则表达式:为什么在我的示例中不是最长的resp。左路比赛有人吗?
测试用例Java正则表达式:为什么在我的示例中不是最长的resp。左路比赛有人吗?,java,regex,regex-greedy,Java,Regex,Regex Greedy,测试用例 Pattern P1 = Pattern.compile(".*(<\\{([0-9A-Za-z_]+)\\}>).*"); Pattern P2 = Pattern.compile(".*(<\\{([0-9A-Za-z_]+)\\}>|\\{([0-9A-Za-z_]+)\\}).*"); String text = "a <{xyz}> b"; Matcher m = P1.matcher(text); m.matches(); Strin
Pattern P1 = Pattern.compile(".*(<\\{([0-9A-Za-z_]+)\\}>).*");
Pattern P2 = Pattern.compile(".*(<\\{([0-9A-Za-z_]+)\\}>|\\{([0-9A-Za-z_]+)\\}).*");
String text = "a <{xyz}> b";
Matcher m = P1.matcher(text);
m.matches();
String g1 = m.group(1);
System.out.println(g1);
m = P2.matcher(text);
m.matches();
g1 = m.group(1);
System.out.println(g1);
Pattern P1=Pattern.compile('%1!');
Pattern P2=Pattern.compile(“.*([0-9A-Za-z\+)\\})。*”;
String text=“a b”;
匹配器m=P1.匹配器(文本);
m、 匹配();
串g1=m组(1);
系统输出打印Ln(g1);
m=P2.匹配器(文本);
m、 匹配();
g1=m组(1);
系统输出打印Ln(g1);
输出
<{xyz}>
{xyz}
{xyz}
问题
我本以为P2的输出也是
,因为
- 这是手术室的第一条规则
- 匹配的
比{xyz}
口头目标如下:
匹配
或{…}
中的内容,但如果输入是
,则将其作为首选项
目前我想到的唯一解决方案是将P2拆分为两个正则表达式,然后首先使用
将输入应用于该正则表达式,如果不匹配,请尝试不使用
的另一个正则表达式。但我很好奇,如果只使用一个正则表达式,它将如何工作。问题是,在允许模式进入(…)之前,在第二个正则表达式的开头,贪婪的*
匹配最长的匹配
将其更改为非贪婪型:
.*?(<\{([0-9A-Za-z_]+)\}>|\{([0-9A-Za-z_]+)\}).*
*?(|\{([0-9A-Za-z\]+)\})*