【问题标题】:Regex issue with extracting path values from url从 url 中提取路径值的正则表达式问题
【发布时间】:2012-07-25 23:31:51
【问题描述】:

我正在尝试从 url 中提取视频 ID

http://www.youtube.com/v/Ig1WxMI9bxQ&hl=fr&fs=1&color1=0x2b405b&color2=0x6b8ab6

我使用 Pattern.compile("/v/([^&]*)") 我得到 null 和 如果我使用Pattern.compile("/v/([^/]*)"),我会得到以下输出 Ig1WxMI9bxQ&hl=fr&fs=1&color1=0x2b405b&color2=0x6b8ab6

如何单独提取Ig1WxMI9bxQ

【问题讨论】:

标签: java regex


【解决方案1】:

要找到您可以使用的 id:

String url = "http://www.youtube.com/v/Ig1WxMI9bxQ&hl=fr&fs=1&color1=0x2b405b&color2=0x6b8ab6";
Matcher matcher = Pattern.compile(".*/(.*?)=.*").matcher(url);
if (matcher.matches()) {
   System.out.println(matcher.group(1));
}

【讨论】:

    【解决方案2】:
    import java.util.regex.*;
    
    class Main
    {
      public static void main(String[] args)
      {
        String txt="http://www.youtube.com/v/Ig1WxMI9bxQ&hl=fr&fs=1&color1=0x2b405b&color2=0x6b8ab6";
    
        String re1=".*?";   // Non-greedy match on filler
        String re2="(?:[a-z][a-z0-9_]*)";   // Uninteresting: var
        String re3=".*?";   // Non-greedy match on filler
        String re4="(?:[a-z][a-z0-9_]*)";   // Uninteresting: var
        String re5=".*?";   // Non-greedy match on filler
        String re6="(?:[a-z][a-z0-9_]*)";   // Uninteresting: var
        String re7=".*?";   // Non-greedy match on filler
        String re8="(?:[a-z][a-z0-9_]*)";   // Uninteresting: var
        String re9=".*?";   // Non-greedy match on filler
        String re10="(?:[a-z][a-z0-9_]*)";  // Uninteresting: var
        String re11=".*?";  // Non-greedy match on filler
        String re12="((?:[a-z][a-z0-9_]*))";    // Variable Name 1
    
        Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6+re7+re8+re9+re10+re11+re12,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
        Matcher m = p.matcher(txt);
        if (m.find())
        {
            String var1=m.group(1);
            System.out.print("("+var1.toString()+")"+"\n");
        }
      }
    }
    

    您可以使用 txt2re.com 来满足您的所有正则表达式需求(:值得检查。没用,但您当然可以简化您获得的源代码。

    【讨论】:

      【解决方案3】:

      试试:

      String url = http://www.youtube.com/v/Ig1WxMI9bxQ&hl=fr&fs=1&color1=0x2b405b&color2=0x6b8ab6
      String id = url.substring(url.indexOf("/v/") + 3, url.indexOf("&"));
      

      【讨论】:

        【解决方案4】:
        String link = "http://www.youtube.com/v/Ig1WxMI9bxQ&hl=fr&fs=1&color1=0x2b405b&color2=0x6b8ab6";
        Pattern rex = Pattern.compile("(?<=watch\\?v=|/videos/)[^&#]*");
        Matcher m = rex.matcher(link);
        String YouTubeVideoID = m.group();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-03
          • 1970-01-01
          • 1970-01-01
          • 2017-11-06
          相关资源
          最近更新 更多