正则表达式不适用于Java

时间:2015-01-22 18:17:16

标签: java regex string

我有字符串"SELECTOR('(namespace=''ar.com.osde.reintegros'' and eventname=''generacionReintegro'')')"

我需要返回"SELECTOR("")"之间的字符串,结果应为:'(namespace=''ar.com.osde.reintegros'' and eventname=''generacionReintegro'')'

我的正则表达式代码是:

public static String extractSelector(String txt){
    Pattern pattern = Pattern.compile("^SELECTOR\\((.*)\\)$");
    Matcher m = pattern.matcher(txt);
    String s = null;
    while (m.find()) {
        s = m.group(1);
    }
    return s;
}

其中txt = "SELECTOR('(namespace=''ar.com.osde.reintegros'' and eventname=''generacionReintegro'')')"

但这始终会返回null。那是为什么?

1 个答案:

答案 0 :(得分:-1)

jdoodle演示了该部分代码的工作原理(仅为txt添加了声明并删除了return语句)。你确定之前txt没有做任何事吗?

鉴于您的代码,唯一的解释是txt与模式完全不匹配...这是因为while - 循环根本没有执行(因此find始终是SELECTOR假)。

也许(和左括号SELECTOR之间有空格,也许System.out.println("\""+txt+"\""); 可以放在小写中。为了调试这个,你可以编写

{{1}}

在实际匹配之前,或使用IDE的调试器功能执行此操作。引号用于使空格更明确。