Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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
将JS正则表达式更改为在Java中工作_Java_Javascript_Regex_Youtube_Gdata - Fatal编程技术网

将JS正则表达式更改为在Java中工作

将JS正则表达式更改为在Java中工作,java,javascript,regex,youtube,gdata,Java,Javascript,Regex,Youtube,Gdata,我遇到了这个JS正则表达式,它从下面列出的Youtube URL检索ID /(youtu(?:\.be|be\.com)\/(?:.*v(?:\/|=)|(?:.*\/)?)([\w'-]+))/i Youtube URL在以下网站上测试: 如何修改正则表达式以在Java中工作?另外,它也可以修改为从GDataURL中选取ID吗?e、 ghttps://gdata.youtube.com/feeds/api/users/Test/?alt=json&v=2 更新:

我遇到了这个JS正则表达式,它从下面列出的Youtube URL检索ID

/(youtu(?:\.be|be\.com)\/(?:.*v(?:\/|=)|(?:.*\/)?)([\w'-]+))/i
Youtube URL在以下网站上测试:

如何修改正则表达式以在Java中工作?另外,它也可以修改为从GDataURL中选取ID吗?e、 g
https://gdata.youtube.com/feeds/api/users/Test/?alt=json&v=2

更新: 这就是我打算使用正则表达式的函数

public static String getIDFromYoutubeURL(String ytURL ) {
    if(ytURL.startsWith("https://gdata")) {  // This is my obviously silly hack,      
       ytURL = ytURL.replace("v=\\d", ""); // I belive Regext should handle this.
    }
    String pattern = "(?i)(https://gdata\\.)?(youtu(?:\\.be|be\\.com)/(?:.*v(?:/|=)|(?:.*/)?)([\\w'-]+))";
    Pattern compiledPattern = Pattern.compile(pattern);
    Matcher matcher = compiledPattern.matcher(ytURL);

    if(matcher.find()){
        return matcher.group(3);
    }
    return null;
}
目前,对于上面列出的URL和
https://gdata.youtube.com/feeds/api/users/Test/?id=c
。但是,如果gdataurl具有version参数,那么它就不能正常工作。e、 gV=2,(
https://gdata.youtube.com/feeds/api/users/Test/?id=c&v=2
)。在这种情况下,它返回2作为ID。如何改进它以在GDataURL中返回Test而不是2作为ID?
谢谢。

您可以使用模式不区分大小写标志。比如说,

Pattern p = Pattern.compile("(youtu(?:\\.be|be\.com)\\/(?:.*v(?:\\/|=)|(?:.*\\/)?)([\\w'-]+))", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text_to_search);
String output = m.group();
我修好了
请改用replaceAll:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test2 {
    public Test2() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        String toTest = getIDFromYoutubeURL(
                "https://gdata.youtube.com/feeds/api/users/Test/?id=c&v=2");
        System.out.println(toTest);
    }

    public static String getIDFromYoutubeURL(String ytURL ) {
        if(ytURL.startsWith("https://gdata")) {  // This is my obviously silly hack,      
           ytURL = ytURL.replaceAll("v=\\d", ""); // I belive Regext should handle this.
        }
        String pattern = "(?i)(https://gdata\\.)?(youtu(?:\\.be|be\\.com)/(?:.*v(?:/|=)|(?:.*/)?)([\\w'-]+))";
        Pattern compiledPattern = Pattern.compile(pattern);
        Matcher matcher = compiledPattern.matcher(ytURL);

        if(matcher.find()){
            return matcher.group(3);
        }
        return null;
    }
}

我认为这里需要更多的信息。你会在哪里使用正则表达式?在被导入的文件上使用它?实际上,你可以在任何地方使用它。即使是在一个文件被管道输出!说真的,如果我提到java,你认为我想在哪里使用它?为什么你认为它在java中不起作用?你试过了吗?如果是,错误消息是什么?
\w
后面的撇号看起来不正确!嗨,Paul,我测试过了,在我更新的函数中它返回了null。