如何使用正则表达式从URL获取secondlast元素

时间:2015-12-24 15:16:42

标签: android regex

我有一个解决方案来从URL获取最后一个元素:

public static String getLastBitFromUrl(final String url){
    // return url.replaceFirst("[^?]*/(.*?)(?:\\?.*)","$1);" <-- incorrect
    return url.replaceFirst(".*/([^/?]+).*", "$1");
}

E.g。 www.foo.com/id会给我id,但如果我想id1来自www.foo.com/id1/id2该怎么办?

我必须对正则表达式做出哪些更改?

2 个答案:

答案 0 :(得分:1)

此解决方案没有正则表达式。试试这个:

`String url =“www.foo.com/id1/id2”;

String idArray = url.split(“/”);

String id1 = idArray [1];`

这将使用给定参数拆分字符串,即“/”。所以idArray [1]会给你第一个id。

答案 1 :(得分:1)

如果您需要基于正则表达式的解决方案,更正的解决方案将是:

public static String getLastBitFromUrl(final String url){
    return url.replaceFirst("[^/]*/([^/?]+).*", "$1");
}

//...
System.out.println(getLastBitFromUrl("www.foo.com/id"));      // => id
System.out.println(getLastBitFromUrl("www.foo.com/id1/id2")); // => id1

请参阅demo

重点是.*首先匹配整个字符串,然后回溯检查/。所以,你匹配最后一个/。要获得第一个/,您不需要replaceFirst方法,可以使用replaceAll,但使用[^/]*否定字符类*量词意义< em>匹配所有字符,但/为零次或多次。