缺少正则表达式中的最后一个右括号

时间:2012-02-14 05:34:53

标签: regex string

来自以下字符串

lookup('CONTACT','CON_LKP','LKP_TAB1.COUNTRY_CD')||lookup('CONTACT','CON_LKP','LKP_TAB2.OBJECTIVE')||$country_cd$

提取我使用的查找功能

Pattern p = Pattern.compile("(lookup\\([^)]*)\\)");

但是这个函数正在重新匹配除最后一个右括号')'之外的匹配。喜欢它的回归

lookup('CONTACT','CON_LKP','LKP_TAB1.COUNTRY_CD'

我犯错的地方。顺便说一句,我对正则表达式知之甚少。所以我的问题可能非常愚蠢。

1 个答案:

答案 0 :(得分:1)

只需将行更改为

即可
Pattern p = Pattern.compile("(lookup\\([^)]*\\))");

您还需要在匹配组中包含结束括号\\)

代码:

shadyabhi@archlinux /tmp $ cat RegExpTest.java
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExpTest {
    public static void main(String[] args) {

        String str = "lookup('CONTACT','CON_LKP','LKP_TAB1.COUNTRY_CD')||lookup('CONTACT','CON_LKP','LKP_TAB2.OBJECTIVE')||$country_cd$";

        String p = "(lookup\\([^)]*\\))";
        Pattern pattern = Pattern.compile(p);
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()){
            System.out.println(matcher.group(1));
        }
    }
}
shadyabhi@archlinux /tmp $ javac RegExpTest.java 
shadyabhi@archlinux /tmp $ java RegExpTest 
lookup('CONTACT','CON_LKP','LKP_TAB1.COUNTRY_CD')
shadyabhi@archlinux /tmp $