我同意正则表达式很简单,但我真的不明白它为什么找不到并提取数据。此外,我对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
?
答案 0 :(得分:3)
您需要使用find()
类的Matcher
方法来检查是否找到了Pattern
。 Here'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");
}