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