我有一个解决方案来从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
该怎么办?
我必须对正则表达式做出哪些更改?
答案 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>匹配所有字符,但/
为零次或多次。