【发布时间】:2018-06-25 01:57:11
【问题描述】:
所以我正在尝试创建一个解析器来匹配字符串的某些部分。字符串看起来像 f(q[group1],[group2])=(q[group3],[group4],[group5])。下面代码中的 Pattern.matches() 返回 true,但我无法通过 matcher.group(int) 访问组。提供的代码中的最后一行抛出:java.lang.IllegalStateException: No match available
public class Parser {
Pattern pattern;
Matcher matcher;
String g;
public Parser(String s) {
g = s.replaceAll("\\s+", "");
pattern = Pattern.compile("^f\\(q(\\d+),(.)\\)=\\(q([+-]*\\d+),(.),([+-])1\\)$");
matcher = pattern.matcher(g);
boolean b = Pattern.matches("^f\\(q(\\d+),(.)\\)=\\(q([+-]*\\d+),(.),([+-])1\\)$",g);
System.out.println(b + " ");
System.out.println(matcher.group(1));
}
}
【问题讨论】:
-
您永远无法与
matcher匹配。我不确定您为什么要调用静态方法Pattern.matches但该行应为boolean b = matcher.matches();
标签: java regex parsing pattern-matching matcher