【发布时间】:2015-12-12 11:18:54
【问题描述】:
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
String url="http://a.b.com/m/test/index";
System.out.println(url.replaceAll("^.*?((?<!/)(?:/)(?!/))", ""));
}
}
系统打印为:m/test/index。
但在我看来,它应该打印的是:/m/test/index。有人给点理由吗?
【问题讨论】:
-
使用 URI/URL 类来处理它们。在这种情况下不要玩正则表达式。
-
虽然您的评论通常是正确的,但a)这不是问题所在,b)必须有人编写这些 URL 处理器。参见阿西莫夫的短篇小说《职业》。
-
再一次,我不反对。这个问题是关于正则表达式的,而不是具体的 URL。字符串中的“http”是附带的。
-
^.*?((?<!/)(?=/)(?!//))见Demo -
(?:/)将匹配/之前的m,所以我们应该使用(?=/)