我有点迷失了正则表达式ATM。
我有以下链接:
http://www.youtube.com/embed/SomER1aNdomTexT?list=UUDvJQzC6YfBdOMkbQGUekOg
我需要在" / embed /"之后检索值。在"?list"。
之前所以我做了以下事情:
String re1="(embed)"; // Word 1
String re2="(\\/)"; // Any Single Character 1
String re3="((?:[a-z][a-z]+))"; // Word 2
String re4=".*?"; // Non-greedy match on filler
String re5="(\\?)"; // Any Single Character 2
但是,当我将链接拆分为:
时String[] split = youtubeLink.split( regex );
似乎没有工作。
任何提示?
答案 0 :(得分:2)
试试这个,
String str="http://www.youtube.com/embed/SomER1aNdomTexT?list=UUDvJQzC6YfBdOMkbQGUekOg";
String re1="(embed)"; // Word 1
String re2="(\\/)"; // Any Single Character 1
String re3="((?:[a-z][a-z]+))"; // Word 2
String re4=".*?"; // Non-greedy match on filler
String re5="(\\?)"; // Any Single Character 2
String []st1=str.split("embed\\/");
String []st2=st1[1].split("\\?list");
System.out.println(st2[0]);
答案 1 :(得分:2)
只需使用此代码即可获得尾部
String s="http://www.youtube.com/embed/SomER1aNdomTexT?list=UUDvJQzC6YfBdOMkbQGUekOg";
s=s.split("/embed/")[1].split("\\?list")[0];
答案 2 :(得分:2)
尝试使用此组中的组:
^.*/([^/\?]*)\?[^/\?]*$
^
:行首.*
:任何/
:文字/
([^/\?]*)
:不包含/
和?
\?
:文字?
[^/\?]*
:除/
和?
$
:行尾我没有测试它,但这样的事情应该有效。
当我们使用Java字符串时,上面表达式中的每个\
必须写为\\
。
import java.util.regex.Pattern;
import java.util.regex.Matcher;
// ...
Pattern.compile("^.*/([^/\\?]*)\\?[^/\\?]*$")
.matcher(input)
.group(1);
答案 3 :(得分:2)
似乎你想得到资源的名称
在这种情况下,您不应该使用正则表达式,而是URL
和File
类。
String s = "http://www.youtube.com/embed/SomER1aNdomTexT?list=UUDvJQzC6YfBdOMkbQGUekOg";
URL url = new URL(s);
File f = new File(url.getPath());//url.getPath() returns "/embed/SomER1aNdomTexT"
String resourceName = f.getName();
System.out.println(resourceName);
输出:SomER1aNdomTexT
答案 4 :(得分:2)
试试这个
(?<=\/embed\/).*(?=\?list)
答案 5 :(得分:1)
这样做可能更容易:
Pattern pattern = Pattern
.compile("^(?:.(?!embed))+/embed/((?:.(?!list))+)\\?list.*$");
Matcher matcher = pattern
.matcher("http://www.youtube.com/embed/SomER1aNdomTexT?list=UUDvJQzC6YfBdOMkbQGUekOg");
if (matcher.matches()) {
System.out.println(matcher.group(1));
}