Получить совпадающее значение регулярного выражения

1

Я немного потерялся в банкомате регулярного выражения.

У меня есть следующая ссылка:

 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 );

Кажется, не работает.

Какие-нибудь советы?

Теги:

6 ответов

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]);
2

просто вы можете использовать этот код для получения хвостовой части

String s="http://www.youtube.com/embed/SomER1aNdomTexT?list=UUDvJQzC6YfBdOMkbQGUekOg";
s=s.split("/embed/")[1].split("\\?list")[0];
2

попробуй это

(?<=\/embed\/).*(?=\?list)
2

Попробуйте использовать группу из этого:

^.*/([^/\?]*)\?[^/\?]*$
  • ^: начало строки
  • .*: все
  • /: литерал /
  • ([^/\?]*): группа, не содержащая / и ?
  • \? : буквально ?
  • [^/\?]*: ничего, кроме / и ?
  • $: конец строки

Я не тестировал его, но что-то вроде этого должно работать. Поскольку мы используем строку Java, каждый \ из выражения выше должен быть записан как \\.

import java.util.regex.Pattern;
import java.util.regex.Matcher;
// ...
Pattern.compile("^.*/([^/\\?]*)\\?[^/\\?]*$")
       .matcher(input)
       .group(1);
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

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));
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню