为什么匹配器找不到模式

时间:2017-07-14 23:08:03

标签: java regex

我同意正则表达式很简单,但我真的不明白它为什么找不到并提取数据。此外,我对Java的经验很少,可能是它的原因。

方法1

String access_token = Utils.extractPattern(url, "access_token=([a-z0-9]+)&");

网址与https://oauth.vk.com/blank.html#access_token=abcedefasdasdasdsadasasasdads123123&expires_in=0&user_id=1111111111

类似

的Utils

public static String extractPattern(String string, String pattern) {
    Pattern searchPattern = Pattern.compile(pattern);
    Matcher matcher = searchPattern.matcher(string);
    Log.d("pattern found - ", matcher.matches() ? "yes" : "no");
    return matcher.group();
}

为什么它失败了java.lang.IllegalStateException: No successful match so far

1 个答案:

答案 0 :(得分:3)

您需要使用find()类的Matcher方法来检查是否找到了PatternHere's文档:

  

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

     

此方法从此开始   matcher的区域,或者,如果以前调用该方法的话   成功之后,匹配器一直没有被重置   字符与上一场比赛不匹配。

     

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

下面应该有效:

public static String extractPattern(String string, String pattern) {
    Pattern searchPattern = Pattern.compile(pattern);
    Matcher matcher = searchPattern.matcher(string);
    if(matcher.find()){
        System.out.println("Pattern found");
        return matcher.group();
    }
    throw new IllegalArgumentException("Match not found");
}