来自以下字符串
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'
我犯错的地方。顺便说一句,我对正则表达式知之甚少。所以我的问题可能非常愚蠢。
答案 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 $