在线测试器中的正则表达式匹配,但在JAVA中没有

时间:2013-02-18 19:55:26

标签: java regex pattern-matching

我正在尝试从此字符串BetClic

中提取文本popup_siteinfo(this, '/click/betclic', '373', 'BetClic', '60€');

我编写了一个适用于Regex Tester的简单正则表达式,但这对Java不起作用。

这是正则表达式

'\d+', '(.*?)'

这是Java输出

Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:485)
at javaapplication1.JavaApplication1.main(JavaApplication1.java:74)
Java Result: 1

这是我的代码

Pattern pattern = Pattern.compile("'\\d+', '(.*?)'");
Matcher matcher = pattern.matcher(onMouseOver);                
System.out.print(matcher.group(1));

onMouseOver字符串为popup_siteinfo(this, '/click/betclic', '373', 'BetClic', '60€');

我不是正则表达式的专家,但我很确定我的一点都不错!

建议?

2 个答案:

答案 0 :(得分:3)

您需要在 find()之前致电group(...)

Pattern pattern = Pattern.compile("'\\d+', '(.*?)'");
Matcher matcher = pattern.matcher(onMouseOver);                
if(matcher.find()) {
  System.out.print(matcher.group(1));
}
else {
  System.out.print("no match");
}

答案 1 :(得分:0)

您在没有先调用匹配操作(例如group(1))的情况下调用find()。这是IllegalStateException的原因。

如果您必须使用该分组案例进行替换,那么如果您只使用 $ 1 则不需要这样做,因为replaceAll()是匹配操作。