-3

URLから特定のYouTubeビデオのビデオIDを抽出するための単純なJava正規表現を作成しようとしています。例:

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

私は何を間違っていますか?

4

3 に答える 3

2

findパーシャルに一致するように呼び出しStringます。matches呼び出した後に呼び出してはいけませんfind- これはIllegalStateException. 後者が完全に返すの1ではなく、グループをキャプチャしたい0String

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)); 
}
于 2013-10-06T23:24:59.410 に答える
2
Matcher matcher = pattern.match(url);
System.out.println(matcher.getGroupCount() ); //outputs 1

まず、上記の 2 行はコンパイルすらできません。それらを次のように変更します。

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
于 2013-10-06T23:28:30.740 に答える