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()
谢谢你们的帮助!对于[(].?[)],像()这样的空括号将被匹配,因此将*替换为+