Java:正则表达式不匹配?

Java:正则表达式不匹配?,java,regex,Java,Regex,我尝试使用以下正则表达式从字符串中提取特殊序列: [(].*[)] 只有当字符串包含()且它们之间有文本时,我的模式才应该匹配 不知何故,我使用Pattern\compile(myString)创建了一个新的模式,然后使用Matcher Matcher=myPattern.Matcher()匹配字符串它找不到任何东西,即使我试过,它在那里工作 我的Pattern是另一个类中的静态finalPattern对象(我直接使用了Pattern#compile(myString)) 要匹配的字符串示例:

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

[(].*[)]
只有当字符串包含
()
且它们之间有文本时,我的模式才应该匹配

不知何故,我使用
Pattern\compile(myString)
创建了一个新的
模式
,然后使用
Matcher Matcher=myPattern.Matcher()匹配字符串它找不到任何东西,即使我试过,它在那里工作

我的
Pattern
是另一个类中的
静态final
Pattern对象(我直接使用了
Pattern#compile(myString)

要匹配的字符串示例:

save (xxx,yyy)

这里可能的问题是你的量词

由于您正在对任何字符使用贪婪的
*
组合,因此您的匹配将无法正确定界,因为
也将匹配结束

尝试使用
[(].?[)]

请参见中的量词

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

另请注意(谢谢)

  • *
    量词将匹配0+个字符,因此如果您想将匹配限制为非空括号,请改用
    +?
    ——这将保证括号内至少有一个字符

希望下面的代码能有所帮助:its会提取包括它们在内的“(“&”)之间的数据

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”,以更改正在获取的子字符串的边界索引。

您应该包含部分代码。请说明是否要匹配提取器。什么没有发现任何意义?-您使用的是matches()还是find()?您还可以提到,如果您使用的是
matches()
find()
好的,伙计们,是我的错,我修复了它,因为我确实忘记了使用
find()
谢谢你们的帮助!对于[(].?[)],像()这样的空括号将被匹配,因此将*替换为+