Я немного потерялся в банкомате регулярного выражения.
У меня есть следующая ссылка:
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 );
Кажется, не работает.
Какие-нибудь советы?
попробуй это,
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]);
просто вы можете использовать этот код для получения хвостовой части
String s="http://www.youtube.com/embed/SomER1aNdomTexT?list=UUDvJQzC6YfBdOMkbQGUekOg";
s=s.split("/embed/")[1].split("\\?list")[0];
попробуй это
(?<=\/embed\/).*(?=\?list)
Попробуйте использовать группу из этого:
^.*/([^/\?]*)\?[^/\?]*$
^
: начало строки.*
: все/
: литерал /
([^/\?]*)
: группа, не содержащая /
и ?
\?
: буквально ?
[^/\?]*
: ничего, кроме /
и ?
$
: конец строки Я не тестировал его, но что-то вроде этого должно работать. Поскольку мы используем строку Java, каждый \
из выражения выше должен быть записан как \\
.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
// ...
Pattern.compile("^.*/([^/\\?]*)\\?[^/\\?]*$")
.matcher(input)
.group(1);
Это означает, что вы хотите получить имя ресурса.
В этом случае вам не следует использовать регулярные выражения, а также классы 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
Возможно, было бы проще сделать что-то вроде этого:
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));
}