为什么匹配器找不到模式



我同意正则表达式很简单,但我真的不明白为什么它找不到和提取数据。另外,我对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

实用工具

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

您需要使用Matcherfind()方法来检查是否找到Pattern。以下是文档:

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

此方法从此开头开始 匹配器的区域,或者,如果该方法的先前调用是 成功,匹配器此后未重置,在第一次 字符与前一个匹配项不匹配。

如果匹配成功,则可以通过 开始、结束和分组方法。

下面应该有效:

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

最新更新