使用java中的regex从url的字符串组中提取数字

时间:2015-09-09 08:12:09

标签: java regex

我有一个具有以下格式的网址:

https://address.com/somestring/somestring-2/c100.200.3.4/somestrigx3/somestring.4

我想从c100.200.3.4获得由c和/和点分隔的数字。所以最后我想要100,200,3,4。

我想知道是否有办法为此构建正则表达式模式而不是经典的字符串搜索和计算。

2 个答案:

答案 0 :(得分:1)

可以使用1个正则表达式,但需要一些代码。

String s = "https://address.com/somestring/somestring-2/c100.200.3.4/somestrigx3/somestring.4";
Pattern pattern = Pattern.compile("(?<=/c)(\\d+)|(?!^)\\G\\.(\\d+)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    if (matcher.group(1) != null)
        System.out.println(matcher.group(1));
    if (matcher.group(2) != null)
        System.out.println(matcher.group(2)); 
}

请参阅IDEONE demo

正则表达式(?<=/c)(\d+)|(?!^)\G\.(\d+)包含两个备选方案:(?<=/c)(\d+)匹配并在{1}}之后将任何数字序列捕获到第1组中,/c匹配文字的连续序列{ {1}}和数字(将后者捕获到第2组)成功上一次匹配后(由于(?!^)\G\.(\d+))。由于任何一个组都可以非初始化,我们必须将其检查为null。

<强>更新

因为 - 事实证明 - 数字组的数量是固定的(4),你可以使用更简单的正则表达式捕获组:

.

请参阅another demo

答案 1 :(得分:1)

(void*) a = &(someArray[x])

首先,它选择String splits[] = input_url.replaceAll(".*?/c([0-9.]+)/.*", "$1").split("[.]"); /c(...)/之间的文本,并用捕获的组替换整个字符串。之后,它用一个点分割字符串。