使用Java中的正则表达式从URL中提取数字

3

获取 URL 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个回答

2
尝试这个一行代码:
String number = url.replaceAll(".*/(\\d{10,20})/.*", "$1");

在数字组后面也应该有一个“/”(我注意到你在编辑中添加了它之前)。否则,它会在http://www.abc.com/alpha/beta/33445566778899xyz/gamma/delta中找到数字,这似乎不是预期的结果。 - Gorkk
@Gorkk 是的,为了完整性应该加上。谢谢。 - Bohemian

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接