Java正则表达式匹配Java代码中方法调用的第一个参数

时间:2014-12-10 09:12:44

标签: java regex

给出以下文字

log.debug("find by example successful, result size: " + results.size(), exception);

如何匹配方法调用的第一个参数,在本例中是第一个括号和最后一个逗号之间的文本:

"find by example successful, result size: " + results.size()

我从以下模式开始:

Pattern.compile("log\\.([\\w]+)\\((.+?)\\)", Pattern.DOTALL);

但如果我尝试匹配逗号,则无效:

Pattern.compile("log\\.([\\w]+)\\((.+?),?\\)", Pattern.DOTALL);

2 个答案:

答案 0 :(得分:1)

您需要在正则表达式中包含,,还需要删除第二个捕获组中的?量词。这样正则表达式引擎会贪婪地匹配最后,的所有字符。

Pattern.compile("log\\.(\\w+)\\((.+),", Pattern.DOTALL);

从组索引2中获取所需的字符串。

String s = "log.debug(\"find by example successful, result size: \" + results.size(), exception);";
Pattern regex = Pattern.compile("log\\.(\\w+)\\((.+),");
 Matcher matcher = regex.matcher(s);
 while(matcher.find()){
        System.out.println(matcher.group(2));
}

输出:

"find by example successful, result size: " + results.size()

答案 1 :(得分:0)

\\(.*,

试试这个。看看演示。这会在第一个(和最后一个,之间进行匹配。

https://regex101.com/r/nL5yL3/10