Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式与有效结果不匹配_Java_Regex - Fatal编程技术网

Java正则表达式与有效结果不匹配

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 =

我正试图编写一个简单的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 = 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