2014-02-23 75 views
3

采取URL http://www.abc.com/alpha/beta/33445566778899/gamma/delta通过正则表达式

在Java中从URL中提取号码,我需要返回数字33445566778899(正斜杠去除,数字长度是可变的,但数字10 & 20之间)

够简单了(或者我以为)除了我已经尝试过的一切似乎没有工作,但为什么?

Pattern pattern = Pattern.compile("\\/([0-9])\\d{10,20}\\/"); 
     Matcher matcher = pattern.matcher(fullUrl); 
     if (matcher.find()) { 
      return matcher.group(1); 
     } 

回答

1

尝试使用下面的衬板:

String number = url.replaceAll(".*/(\\d{10,20})/.*", "$1"); 
+0

不应该在数字组后面加一个'/'(我注意到你在编辑之前添加了它)?否则,它会在'http:// www.abc.com/alpha/beta/33445566778899xyz/gamma/delta'中找到该数字,这似乎并不是预期的。 – Gorkk

+0

@Gorkk是的,为了完整它应该在那里。谢谢。 – Bohemian

0

此正则表达式的工作 -

"\\/(\\d{10,20})\\/" 

测试IT-

String fullUrl = "http://www.abc.com/alpha/beta/33445566778899/gamma/delta"; 
Pattern pattern = Pattern.compile("\\/(\\d{10,20})\\/"); 
Matcher matcher = pattern.matcher(fullUrl); 
if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

输出 - 33445566778899

0

尝试,

String url = "http://www.abc.com/alpha/beta/33445566778899/gamma/delta"; 
String digitStr = null; 
for(String str : url.split("/")){ 
    System.out.println(str); 
    if(str.matches("[0-9]{10,20}")){ 
     digitStr = str; 
     break; 
    } 
} 
System.out.println(digitStr); 

输出:

33445566778899 
0

与其说它 “似乎不工作” 的,你应该给使用它返航。测试它证实了我的想法:你的代码将返回3这个输入。

这很简单,因为您写入的正则表达式会在/之后捕获一个数字,然后是10至20位数字,然后是/

你想要的正则表达式是"/(\\d{10,20})/"(你不需要转义/)。下面你会发现我测试过的代码。

public static void main(String[] args) { 
    String src = "http://www.abc.com/alpha/beta/33445566778899/gamma/delta"; 
    Pattern pattern = Pattern.compile("/(\\d{10,20})/"); 
    Matcher matcher = pattern.matcher(src); 
    if (matcher.find()) { 
     System.out.println(matcher.group(1)); 
    } 
}