为什么matcher找不到模式

kqhtkvqz  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(383)

这个问题在这里已经有了答案

matcher的matches()方法返回false,find()和groupcount()返回结果(1个答案)
三年前关门了。
我同意regex很简单,但我真的不明白为什么它不能找到和提取数据。另外,我对java的经验很少,这可能是原因所在。
方法1

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

url就像 https://oauth.vk.com/blank.html#access_token=edefasdasdasdsadasasasdads123123&expires_in=0&user_id=1111111111 公用事业

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 ?

j0pj023g

j0pj023g1#

你需要使用 find() 方法 Matcher 类来检查 Pattern 是否找到。以下是文档:
尝试查找与模式匹配的输入序列的下一个子序列。
此方法从该匹配器区域的开始处开始,或者,如果先前成功调用了该方法,并且此后未重置匹配器,则从先前匹配的第一个未匹配字符处开始。
如果匹配成功,则可以通过start、end和group方法获得更多信息。
下面应该有用:

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");
}

相关问题