2014-02-23 130 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)); 
    } 
}