因此,正则表达式似乎在最长的匹配项上匹配。例如:

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

09-16 06:59