通过Regex从Java中提取URL

时间:2014-02-23 14:07:32

标签: java regex

获取网址http://www.abc.com/alpha/beta/33445566778899/gamma/delta

我需要返回数字33445566778899(删除正斜杠,数字可变长度但介于10和20位之间)

足够简单(或者我认为),除了我尝试过的所有内容似乎都不起作用,但为什么呢?

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

4 个答案:

答案 0 :(得分:1)

试试这个单行:

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

答案 1 :(得分:0)

这个正则表达式有效 -

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

测试 -

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

答案 2 :(得分: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

答案 3 :(得分: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));
    }
}