Java:正则表达式不匹配?

时间:2016-09-21 10:14:18

标签: java regex

我正在尝试使用以下正则表达式从字符串中提取特殊序列:

[(].*[)]

我的模式只应匹配,如果字符串包含(),其中包含文本。

不知何故,我使用Pattern创建一个新的Pattern#compile(myString),然后使用Matcher matcher = myPattern.matcher();匹配字符串,它找不到任何内容,即使我在{{3}上尝试过它在那里工作。

我的Pattern是另一个类中的static final模式对象(我直接使用Pattern#compile(myString)

要匹配的示例字符串:

save (xxx,yyy)

2 个答案:

答案 0 :(得分:1)

这里可能存在的问题是你的量词。

由于您对任何字符使用贪婪*.的组合,因此您的匹配将无法正确分隔,因为.也会与结束)匹配。

尝试使用不情愿的[(].*?[)]

请参阅docs中的量词。

您也可以 转义括号,而不是使用自定义字符类,如:\\(\\),但这与您的问题无关。

另请注意(感谢esprittn

  • *量词将匹配0+个字符,因此如果您想将匹配限制为非空括号,请使用.+?代替 - 确保您内部至少有一个字符括号。

答案 1 :(得分:0)

希望以下代码有所帮助:它在'('&')'之间提取数据。包括他们。

String pattern = "\\(.*\\)";
    String line = "save(xx,yy)";
    Pattern TokenPattern = Pattern.compile(pattern);

    Matcher m = TokenPattern.matcher(line);
    while (m.find()) {

        int start = m.start(0);
        int end = m.end(0);

        System.out.println(line.substring(start, end));

    } 

删除括号更改'开始'开始+ 1'并且'结束'到'结束-1'更改正在采用的子字符串的边界索引。