Java Regex无法匹配一行注释

时间:2014-04-17 03:05:16

标签: java regex pattern-matching

我正在为类似Java的语言编写编译器,并且需要匹配样式// Comment.的单行注释的出现位置。

我的尝试:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatchOneLineComment {
  public static void main(String[] args) {
    Matcher matcher = Pattern.compile("//(.*)").matcher("//abc");
    System.out.println(matcher.group()); // should print "//abc"... right?
  }
}

但是我收到以下错误:

Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:485)
    at java.util.regex.Matcher.group(Matcher.java:445)
    at MatchOneLineComment.main(MatchOneLineComment.java:7)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

别忘了拨打Matcher#find()

matcher.find();

并在致电group()之前检查结果。

来自javadoc

  

尝试查找输入序列的下一个子序列   匹配模式。

     

此方法从此匹配器区域的开头开始,或者,如果是   以前的方法调用是成功的,匹配器有   从没有重置,在第一个字符不匹配   上一场比赛。

     

如果匹配成功,则可以通过获取更多信息   开始,结束和分组方法。