我正在尝试使用以下正则表达式从字符串中提取特殊序列:
[(].*[)]
我的模式只应匹配,如果字符串包含()
,其中包含文本。
不知何故,我使用Pattern
创建一个新的Pattern#compile(myString)
,然后使用Matcher matcher = myPattern.matcher();
匹配字符串,它找不到任何内容,即使我在{{3}上尝试过它在那里工作。
我的Pattern
是另一个类中的static final
模式对象(我直接使用Pattern#compile(myString)
。
要匹配的示例字符串:
save (xxx,yyy)
答案 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'更改正在采用的子字符串的边界索引。