简单的java正则expression式抛出illegalstateexception
我试图做一个快速的理智检查…及其失败。 这是我的代码 –
import java.util.regex.*; public class Tester { public static void main(String[] args) { String s = "a"; Pattern p = Pattern.compile("^(a)$"); Matcher m = p.matcher(s); System.out.println("group 1: " +m.group(1)); } }
而我所期望的是看到group 1: a
。 但相反,我得到一个IllegalStateException: no match found
,我不知道为什么。
编辑:我也尝试打印出groupCount()
,它说有1。
您需要首先调用m.find()
或m.matches()
才能使用m.group
。
-
find
可以用来查找与你的模式匹配的每个子string(主要用于有多个匹配的情况) -
matches
将检查整个string是否匹配你的模式,所以你甚至不需要在你的模式中添加^
和$
。
我们也可以使用m.lookingAt()
但现在让我们跳过它的描述(你可以在文档中阅读它)。
使用Matcher#matches或Matcher#find调用Matcher.group(int)
if (m.find()) { System.out.println("group 1: " +m.group(1)); }
在这种情况下, Matcher#find
比较合适,因为Matcher#matches
匹配完整的String
(在匹配expression式中使锚字符冗余)
看Matcher
的javadoc 。 你会看到“试图在成功匹配之前查询它的任何部分将导致抛出IllegalStateException”。
使用if (matcher.find()) {}
来调用你的group(1)
来解决这个问题。