我有以下代码
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