我试图在Java中进行一些模式匹配:
Pattern p = Pattern.compile("(\\d+) (\\.+)");
Matcher m = p.matcher("5 soy milk");
String qty = m.group(1);
String name = m.group(2);
我想最终得到一个包含" 5"和一个包含"豆浆"的字符串。但是,这种模式匹配代码给我一个IllegalStateException。
答案 0 :(得分:2)
在尝试获取群组之前,您必须先致电matches()
。
http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#matches()
public boolean matches()
尝试将整个区域与模式匹配。 如果匹配成功,则可以通过start,end和group方法获得更多信息。
试试这个:
Pattern p = Pattern.compile("(\\d+) (\\.+)");
Matcher m = p.matcher("5 soy milk");
if (m.matches())
{
String qty = m.group(1);
String name = m.group(2);
}
答案 1 :(得分:1)
这是因为您没有发起Matcher
。您应该p.matcher(...).matches()
(或.find()
或.lookingAt()
,具体取决于所需的行为 - 使用.find()
进行真正的正则表达式匹配。
并检查.matches()
的结果,因为在您的情况下它返回 false :\.+
(Java字符串中的"\\.+"
)将尝试匹配一个点一次或多次;您应该使用.+
(Java字符串中的".+"
)来匹配"任何字符,一次或多次"。