2013-06-03 135 views
0

我有下面的代码java的正则表达式不包括字符串包含括号

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

它返回getFieldAsDouble(

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

回答

1

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

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 
} 
+1

打我吧... –

1

你必须附上你的东西在括号匹配,你只是得到全场比赛回来

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

然后,你必须因为第一个是完整的匹配

m.group(1) 
3

而不是.*使用[^(]*,这将让任何数目的字符不属于(

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

解释如何解决什么比赛,我的回答解释了怎样用括号 –

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 
} 
+0

@vidit打败你子匹配(我也是)。 –

1

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

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

这是一个测试:

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

输出:

getFieldAsDouble 
+0

不会为不同的输入做同样的事情 –

+0

@JuanMendes是的。我已经添加了可以自己测试的可执行代码。顺便提一句,这直接回答了这个问题。绝对不需要捕获组或解析行,或者做任何比这更复杂的事情。 – Bohemian

相关问题