Java regex,IllegalStateException:找不到匹配项

时间:2015-08-01 16:48:21

标签: java regex

我花了一些时间寻找答案,但我找不到答案,所以,这就是问题所在:

我收到此错误:

    StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw  
    exceptionjava.lang.IllegalStateException: No match found
        at java.util.regex.Matcher.group(Matcher.java:536)
        at extra.regex.checkRegex(regex.java:21)

这是代码

    public class regex {
        public static String checkRegex(String check, String regex)
        {
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(check);
            m.matches();
            return m.group(1);
        }
    }

我用这个来呼叫checkRegex()

    String query = request.getQueryString();//this query looks like "sel=45"
    String regulex = "#^(.+)#"; //even this guy returns no matches

    //out.println(query); //it is is not null
    String result = regex.checkRegex(query, regulex);

    out.println(result);

我在这里看到了一些问题,但所有问题都归结为m.matches()m.find(),但我已经三次检查了。

3 个答案:

答案 0 :(得分:3)

你应该在m.group()块中使用if

     if(m.matches()) {
        return m.group(1);
      } else {
        return null;
      }

答案 1 :(得分:0)

此正则表达式

  String regulex = "^#(.+)#"; 

将匹配

    String query = "#sel=45#";

这种组合没有意义#^^表示字符串的开头,没有任何内容可以在它之前。如果query不包含#,则与regulex不匹配。

答案 2 :(得分:0)

让我们分解你的模式:

var findDate = new Date();
var displayModule = new Date("August 2,2015");    //SET STARTING DATE YOU WANT MODULES DISPLAYED
var hideModule = new Date("January 4,2016");   //SET ENDING DATE YOU WANT MODULES REMOVED
if(findDate > displayModule && findDate < hideModule) {

} else {
    $("#InvalidLineup").remove();
    $("#IRviolations").remove();
}
  • "#^(.+)#" - 文字字符串
  • #^ - 任何字符(可能与行终止符匹配,也可能不匹配)1次或多次
  • (.+) - 文字字符串

那么为什么#无法匹配? sel=45不以String开头,也不以"#^"结尾。

您似乎想要在"#"之间捕获可能存在或不存在的数据(您需要澄清这一点)。以下模式实现了:

"#"

这将匹配"#?([^#]+)#?" 并匹配sel=45

示例:

#sel=45#

结果:

public static void main(String[] args) throws Exception {
    String regulex = "#?([^#]+)#?"; //even this guy returns no matches

    System.out.println(checkRegex("#sel=45#", regulex));
    System.out.println(checkRegex("sel=45", regulex));
}

public static String checkRegex(String check, String regex) {
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(check);
    return m.matches() ? m.group(1): null;
}