Java正则表达式与有效结果不匹配
我正试图编写一个简单的java正则表达式,从给定的youtube视频的url中提取视频id。例如:Java正则表达式与有效结果不匹配,java,regex,Java,Regex,我正试图编写一个简单的java正则表达式,从给定的youtube视频的url中提取视频id。例如: http://www.youtube.com/watch?v=-mzvAAuCo1c 我想提取:-mzvAAuCo1c 以下是我正在尝试的: Pattern pattern = Pattern.compile("v=([^&]+)"); String url = "http://www.youtube.com/watch?v=-mzvAAuCo1c"; Matcher matcher =
http://www.youtube.com/watch?v=-mzvAAuCo1c
我想提取:-mzvAAuCo1c
以下是我正在尝试的:
Pattern pattern = Pattern.compile("v=([^&]+)");
String url = "http://www.youtube.com/watch?v=-mzvAAuCo1c";
Matcher matcher = pattern.match(url);
System.out.println(matcher.getGroupCount() ); //outputs 1
System.out.println(matcher.matches() ); //returns false;
System.out.println( matcher.group(0) ); //throws exception, same for 1
我做错了什么?试试这个
(?<=videos\/|v=)([\w-]+)
找到。调用以匹配部分字符串。调用find
后不要调用matches
-这将导致非法状态异常
。您希望捕获组1
而不是0
,因为后者返回完整的字符串
Pattern pattern = Pattern.compile("v=([^&]+)");
String url = "http://www.youtube.com/watch?v=-mzvAAuCo1c&foo=3";
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
System.out.println(matcher.groupCount());
System.out.println(matcher.group(1));
}
首先,上面的两行甚至不编译。将其更改为:
Matcher matcher = pattern.matcher(url);
System.out.println(matcher.groupCount() ); //outputs 1
第二,正则表达式:
Pattern pattern = Pattern.compile("v=([^&]+)");
只匹配部分输入,这就是为什么
matcher.matches()
返回false
。将正则表达式更改为:
Pattern pattern = Pattern.compile(".*v=([^&]+)");
最后,由于matcher.matches()
不返回true
,因此语句
matcher.group(0)
将引发异常
固定代码:
Pattern pattern = Pattern.compile(".*v=([^&]+)");
String url = "http://www.youtube.com/watch?v=-mzvAAuCo1c";
Matcher matcher = pattern.matcher(url);
System.out.println(matcher.groupCount()); //outputs 1
System.out.println(matcher.matches()); //returns true;
System.out.println(matcher.group(1)); //returns -mzvAAuCo1c
你的代码编译了吗?
matcher.group(0)
Pattern pattern = Pattern.compile(".*v=([^&]+)");
String url = "http://www.youtube.com/watch?v=-mzvAAuCo1c";
Matcher matcher = pattern.matcher(url);
System.out.println(matcher.groupCount()); //outputs 1
System.out.println(matcher.matches()); //returns true;
System.out.println(matcher.group(1)); //returns -mzvAAuCo1c