因此,正则表达式似乎在最长的匹配项上匹配。例如:
public static void main(String[] args) {
String s = "ClarkRalphKentGuyGreenGardnerClarkSupermanKent";
Pattern p = Pattern.compile("Clark.*Kent", Pattern.CASE_INSENSITIVE);
Matcher myMatcher = p.matcher(s);
int i = 1;
while (myMatcher.find()) {
System.out.println(i++ + ". " + myMatcher.group());
}
}
产生输出
克拉克·拉尔夫·肯特·盖伊·格林·加德纳·克拉克超人肯特························································································································
我想要这个输出
克拉克·拉尔夫·肯特 肯特·克拉特(Kent )
我一直在尝试像这样的模式:
Pattern p = Pattern.compile("Clark[^((Kent)*)]Kent", Pattern.CASE_INSENSITIVE);
那是行不通的,但是您明白我的意思了。我希望从Clark到Kent的字符串不包含任何Kent出现。
该字符串:
克拉克·拉尔夫·肯特·盖伊·格林·加德纳·布鲁斯·巴特曼·肯特
应该产生输出
克拉克·拉尔夫·肯特
最佳答案
贪婪vs勉强是您的 friend 在这里。
尝试:Clark.+?Kent