【问题标题】:Java regular expression replace issue [duplicate]Java正则表达式替换问题[重复]
【发布时间】: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”是附带的。
  • ^.*?((?&lt;!/)(?=/)(?!//))Demo
  • (?:/) 将匹配/ 之前的m,所以我们应该使用(?=/)

标签: java regex replace


【解决方案1】:

您的正则表达式读取“尽可能少的字符,包括第一个斜线,该斜线既不在斜线之前也不在斜线之后”。斜线本身显然包含在正则表达式中。它在非捕获组中的事实并不意味着它不是匹配的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多