正则表达式匹配括号之间的任何内容

sco*_*ttm 2 java regex

我正在使用正则表达式用更简单的模式替换特定模式.

我需要从两个括号中取出所有字符,空格,并在捕获组中使用它们.但是,括号之间的字符也可能是括号.

以下是我想要匹配的两个例子:

.message("vel pharetra est urna eget justo. Nunc in dignissim velit. {} "
        + error.getMessage().getProperty())
.build().log();   

.message("Key : " + oldEntry.getKey() + " and Value: " + oldEntry.getValue())
    .build()
    .log();
Run Code Online (Sandbox Code Playgroud)

我现在的正则表达式: \.message\(([\S\s]+?)\)[\S\s]*?((\.log\(\))|(\.build\(\)))\;

当消息中没有括号时,它匹配简单模式.但是当有括号时,它会在第一个右括号处停止捕获组.我确定这是因为我正在使用,+?但我不确定如何指定搜索应该继续.

我用几个例子创建了这个regexr.http://regexr.com/3h15u

anu*_*ava 5

你可以使用这个正则表达式:

\.message\((?s)(.+?)\)\s*(?:\.(?:log|build)\(\)\s*)+\s*;
Run Code Online (Sandbox Code Playgroud)

在捕获的组#1中捕获()捕获文本

RegEx演示

在Java中使用:

final String regex = "\\.message\\((?s)(.+?)\\)\\s*(?:\\.(?:log|build)\\(\\)\\s*)+\\s*;";
Run Code Online (Sandbox Code Playgroud)