否定Java正则表达式中的文字字符串

Nat*_*ars 4 java regex

所以正则表达式似乎与最长的匹配相匹配.例如:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

生成输出

  1. ClarkRalphKentGuyGreenGardnerClarkSupermanKent

我想要这个输出

  1. ClarkRalphKent
  2. ClarkSupermanKent

我一直在尝试以下模式:

 Pattern p = Pattern.compile("Clark[^((Kent)*)]Kent", Pattern.CASE_INSENSITIVE);
Run Code Online (Sandbox Code Playgroud)

这不起作用,但你看到我想说的话.我想要从Clark到Kent的字符串不包含任何Kent的字符串.

这个字符串:

ClarkRalphKentGuyGreenGardnerBruceBatmanKent

应该产生输出

  1. ClarkRalphKent

Gar*_*vis 6

贪心vs不情愿是你的朋友.

尝试: Clark.+?Kent