如何获取具有命名组的字符串,并仅使用Java 7中的值替换该命名的捕获组

时间:2016-04-28 10:40:44

标签: java regex

比如说我有一个带有命名捕获组的以下字符串:

/this/(?<capture1>.*)/a/string/(?<capture2>.*)

我想用像&#34; foo&#34;这样的值替换捕获组。所以我最终得到一个看起来像的字符串:

/this/foo/a/string/bar

限制是:

  1. 必须使用正则表达式,因为字符串在其他地方进行评估,但它不必是捕获组。
  2. 我不需要正则表达式匹配正则表达式。
  3. 编辑:字符串中可以有多个组。

3 个答案:

答案 0 :(得分:0)

您可以找到开始和结束索引

public static String getnewString(String text,String reg){

    StringBuffer result = new StringBuffer(text);

    Pattern pattern = Pattern.compile(reg);
    Matcher matcher = pattern.matcher(text);
    while (matcher.find()) {

       int  startindex= matcher.start();
       int stopindex=matcher.end();
       System.out.println(startindex+" "+stopindex);
        result.delete(startindex, stopindex);

        result.insert(startindex, "foo");

    }


    return result.toString();

}

全面实施:

where

答案 1 :(得分:0)

试试这个,

    int lastIndex = s.lastIndexOf("/");

    String newString = s.substring(0, lastIndex+1).concat("newString");
    System.out.println(newString);

获取subString直到最后&#39; /&#39;然后像上面的

一样将新字符串添加到子字符串中

答案 2 :(得分:0)

我明白了:

String string = "/this/(?<capture1>.*)/a/string/(?<capture2>.*)";
Pattern pattern = Pattern.compile(string);
Matcher matcher = pattern.matches(string);

string.replace(matcher.group("capture1"), "value 1");
string.replace(matcher.group("capture2"), "value 2");

疯狂,但有效。