我有以下代码
Pattern p = Pattern.compile("^get.*\\(");
Matcher m = p.matcher("getFieldAsDouble(String)");
if (m.find()) {
System.out.println(m.group());
}
它返回getFieldAsDouble(
我如何只获取方法的文本名称而不是(
?
而不是.*
use [^(]*
,它将获得任意数量的非字符(
:
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)
你需要用括号括起你想要得到的东西,然后得到那个组:
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