为什么匹配器找不到模式

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

方法1

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

url类似于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

您需要使用Matcher类的find()方法来检查是否找到了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"); }