我有下面的代码java的正则表达式不包括字符串包含括号
Pattern p = Pattern.compile("^get.*\\(");
Matcher m = p.matcher("getFieldAsDouble(String)");
if (m.find()) {
System.out.println(m.group());
}
它返回getFieldAsDouble(
我如何获得唯一的方法,而不是(
的文本名称?
我有下面的代码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.*)\\("); // 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[^(]*");
解释如何解决什么比赛,我的回答解释了怎样用括号 –
你需要围绕你想用括号什么,然后得到该组:
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
}
@vidit打败你子匹配(我也是)。 –
下面是如何在一个简单的行做到这一点:
String methodName = str.replaceAll("\\(.*", "");
这是一个测试:
System.out.println("getFieldAsDouble(String)".replaceAll("\\(.*", ""));
输出:
getFieldAsDouble
不会为不同的输入做同样的事情 –
@JuanMendes是的。我已经添加了可以自己测试的可执行代码。顺便提一句,这直接回答了这个问题。绝对不需要捕获组或解析行,或者做任何比这更复杂的事情。 – Bohemian
打我吧... –