Java Regex组导致Stackoverflow问题

时间:2013-12-16 13:18:55

标签: java regex recursion infinite

我想知道这个问题是否对你们来说是显而易见的,我已经搜索了许多'stackoverflow帖子但未能得到答案。

我正在尝试制作一个最终匹配C.V和Job职位空缺的匹配器。现在我开始学习使用前面提到的正则表达式的正则表达式和匹配。我试图获得一个成功的匹配,以获得匹配的感觉,最终匹配我提到的其他东西,但现在即使是简单的东西也无法正常工作。

public class RunMatchSequence {

public static void main(String[] args) {
    try {



    String emailRegEx = "(\\w+)@(\\w+\\.)(\\w+)(\\.\\w+)*";
    //  String emailRegEx = "(?s).*";
    Pattern pattern = Pattern.compile(emailRegEx);

     String target= "You can email me at g_andy@example.com or andy@example.net to get more info";
     String target2="You can email";
    java.util.regex.Matcher matcher; {

     matcher = pattern.matcher(target);

     while(matcher.find()) {
         System.out.println("Found a Match" + Matcher.group());
         System.out.println("Start position: " + Matcher.start()); 
         System.out.println("End position: " + Matcher.end()); 
          }}} catch (StackOverflowError e) {
              System.out.println("Stackoverflow");
                //JOptionPane.showMessageDialog(null, "Stackoverflow");
            }
}

}

这是运行模式的类。接下来是持有该组的类,这是StackOverflowError发生的地方。(认为它与无限递归有关,但我不知道如何解决它):编辑:我现在意识到导致无限递归的原因是return语句,但我不知道该放什么

public class Matcher{
 public static void main(String[] args) {

     RunMatchSequence.main(args);

//implements MatchResult {
 //  Pattern p = Pattern.compile("a*b");
 //   java.util.regex.Matcher m = p.matcher("aaaaab");
// boolean b = m.matches();
//}
     }

static String group() {
// TODO Auto-generated method stub
return group();
}

static int end() {
// TODO Auto-generated method stub
return end();
}

static int start() {
// TODO Auto-generated method stub
return start();
}

}

2 个答案:

答案 0 :(得分:2)

当你调用Matcher.group时,它会崩溃,因为group方法是递归的,但没有条件可以避免无限次调用。所以调用方法并调用并调用...

答案 1 :(得分:1)

事实证明...... java库支持matcher / pattern api,你需要做的只是在printline中调用matcher.group()而且我的错误是编写matcher。 group(),其大写字母M未被API识别。

所以这些:

    static String group() {
    // TODO Auto-generated method stub
    return group();
    }

    static int end() {
    // TODO Auto-generated method stub
    return end();
    }

    static int start() {
    // TODO Auto-generated method stub
    return start();
   }

已经过时了。