获取正则表达式的匹配值

时间:2014-03-17 13:01:55

标签: java regex

我有点迷失了正则表达式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 );

似乎没有工作。

任何提示?

6 个答案:

答案 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)

似乎你想得到资源的名称 在这种情况下,您不应该使用正则表达式,而是URLFile类。

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