【问题标题】:Regex:Match and Replace a pattern from string while keeping a part of matched string in the replaced string正则表达式:匹配并替换字符串中的模式,同时将匹配字符串的一部分保留在替换的字符串中
【发布时间】:2012-10-13 05:20:12
【问题描述】:

我有一个类似

的字符串
@jhon.p @[User:151|Jhon Carter] Jhon Carter @sunil.p @[User:102|Sunil Nadar] Sunil Nadar

我想将 javascript 或 Java 中的正则表达式应用于上述字符串以获取输出

@jhon.p <a href="#/users/151">Jhon Carter</a> @sunil.p <a href="#/users/102">Sunil Nadar</a>

知道我该怎么做吗?

【问题讨论】:

    标签: java javascript regex


    【解决方案1】:

    你可以使用这个正则表达式来匹配

    @\[User:(\d+)\|(.*?)\]\s*\2
    

    然后您可以使用它来替换 $1 $2 引用组的位置。

    <a href="#/users/$1">$2</a>
    

    【讨论】:

      【解决方案2】:

      这是将为您完成这项工作的 Java 代码:

      String str =
       "@jhon.p @[User:151|Jhon Carter] Jhon Carter @sunil.p @[User:102|Sunil Nadar] Sunil Nadar";
      Matcher m = Pattern.compile("@\\[User:(\\d+)\\|([^]]+)\\]\\s+\\2").matcher(str);
      StringBuffer buf = new StringBuffer();
      while (m.find()) {
         String link = "<a href=\"#/users/" + m.group(1) + "\">" + m.group(2) + "</a>";
         m.appendReplacement(buf, link);
      }
      m.appendTail(buf);
      System.out.printf("Converted String is: %s%n", buf);
      

      输出:

      Converted String is: @jhon.p <a href="#/users/151">Jhon Carter</a> @sunil.p <a href="#/users/102">Sunil Nadar</a>
      

      【讨论】:

        猜你喜欢
        • 2013-10-24
        • 2011-05-28
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 2014-03-22
        • 2012-01-25
        • 2020-07-12
        • 1970-01-01
        相关资源
        最近更新 更多