将JS正则表达式更改为在Java中工作
我遇到了这个JS正则表达式,它从下面列出的Youtube URL检索ID将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 更新:
/(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
更新:
这就是我打算使用正则表达式的函数
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。