我有一个从URL中获取最后一个元素的解决方案:
public static String getLastBitFromUrl(final String url){
// return url.replaceFirst("[^?]*/(.*?)(?:\\?.*)","$1);" <-- incorrect
return url.replaceFirst(".*/([^/?]+).*", "$1");
}www.foo.com/id会给我id,但是如果我想要www.foo.com/id1/id2的id1怎么办?
我必须对正则表达式做哪些更改?
发布于 2015-12-24 15:23:02
这个解决方案是没有准则的。试试这个:
“`String url = "www.foo.com/id1/id2";
字符串idArray = url.split("/");
字符串id1 =idArray1 1;`
这将使用给定的参数(即"/“)拆分字符串。所以idArray1会给你第一个id。
发布于 2015-12-24 22:20:16
如果需要基于正则表达式的解决方案,则更正后的解决方案将是:
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请参阅演示
要点是.*首先匹配整个字符串,然后回溯检查/。所以,您与最后一个/匹配。要获得第一个/,您不需要使用replaceFirst方法,您可以使用replaceAll,但是对于带有*量词的[^/]*否定字符类,它的意思是匹配除/ 0次或更多次以外的所有字符。
https://stackoverflow.com/questions/34454771
复制相似问题