Java正则表达式不包括括号中的字符串



我有以下代码

Pattern p = Pattern.compile("^get.*\(");
Matcher m = p.matcher("getFieldAsDouble(String)");
if (m.find()) {
  System.out.println(m.group());
}

返回getFieldAsDouble(

我如何获得方法的文本名称而不是( ??

[^(]*代替.*,它将得到任意数量的非(字符:

Pattern p = Pattern.compile("^get[^(]*");

您可以使用正则表达式捕获组

Pattern p = Pattern.compile("(^get.*)\("); // The () creates a capture group
Matcher m = p.matcher("getFieldAsDouble(String)");
if (m.find()) {
  System.out.println(m.group(1)); //Group 1
}

你需要把你要匹配的东西放在括号里,你只需要得到完整的匹配

Pattern p = Pattern.compile("^(get.*)\(");

那么您必须请求匹配集合中的第二项,因为第一个是完整匹配

m.group(1)

你需要把你想要得到的东西用括号括起来,然后得到那个group:

Pattern p = Pattern.compile("^(get.*)\(");
Matcher m = p.matcher("getFieldAsDouble(String)");
if (m.matches()) {
    System.out.println(m.group(1)); // Group 0 is the whole match
}

这是如何做到这一点,在一个简单的行:

String methodName = str.replaceAll("\(.*", "");

这里有一个测试:

System.out.println("getFieldAsDouble(String)".replaceAll("\(.*", ""));
输出:

getFieldAsDouble

最新更新