Java RegEx替换

时间:2014-07-19 09:56:00

标签: java regex replace

你好我一直试图取得一些不成功的替代

public class demo {

    public static void main(String[] args){
        String url = "/demoapi/api/user/123";
        String newurl = "/user/?user=$1";

        Pattern pattern = Pattern.compile("/^\\/demoapi\\/api\\/user\\/([0-9]\\d*)$/i");
        Matcher match = pattern.matcher(url);
    }

}

我想用123替换1美元,我该怎么办? 谢谢!

5 个答案:

答案 0 :(得分:0)

我认为你正在寻找这样的东西:

   String url = "/demoapi/api/user/123";
    String newurl = "/user/?user=$1";

    Pattern pattern = Pattern.compile(".*/user/(\\d*)");
    Matcher match = pattern.matcher(url);
    if(match.matches()){
        newurl = newurl.replace("$1", match.group(1));
    }

    System.out.println(newurl);

希望这有帮助。

答案 1 :(得分:0)

精简搜索:.*?(\d+)$

这就是你所需要的:

String replaced = yourString.replaceAll(".*?(\\d+)$", "/user/?user=$1");

the regex demo中,请参阅底部的替换。

<强>解释

  • (\d+)匹配一个或多个数字(这是捕获组1)
  • $锚点断言我们位于字符串的末尾
  • 我们替换为/user/?user=和第1组,$1

答案 2 :(得分:0)

  

我想用123替换1美元,我该怎么做?!

只需使用replace方法,但永远不要忘记逃避$

"/user/?user=$1".replace(/(\$1)/,"123");

答案 3 :(得分:0)

您不需要在模式中输入全文^\\/demoapi\\/api\\/user\\。只需^.*\\/匹配最后一个/符号。所以你的java代码就是,

String url = "/demoapi/api/user/123";
String newurl = "/user/?user=$1";
String m1 = url.replaceAll("(?i)^.*\\/([0-9]+)$", "$1");
String m2 = newurl.replaceAll("\\$1", m1);
System.out.println(m2);

输出:

/user/?user=123

<强>解释

  • (?i)打开不区分大小写的模式。
  • ^.*\\/匹配最后一个/符号。
  • ([0-9]+)$捕获最后的数字。

IDEONE

String url = "/demoapi/api/user/123";
String m1 = url.replaceAll(".*/(\\d*)$", "/user/?user=$1");

你需要在/之前放置(\\d*),这样它才能从开始捕获数字,即123.否则它将打印最后一个数字,即3。

答案 4 :(得分:0)

您可以使用以下任何一种方法: -

public class Test {
public static void main(String[] args) {
    public static void main(String[] args) {

    String url = "/demoapi/api/user/123";
    String newurl = "/user/?user=$1";

    String s1 = newurl.replaceAll("\\$1", Matcher.quoteReplacement("123"));
    System.out.println("s1 : " + s1);
    // OR
    String s2 = newurl.replaceAll(Pattern.quote("$1"),Matcher.quoteReplacement("123"));
    System.out.println("s2 : " + s2);
    // OR
    String s3 = newurl.replaceAll("\\$1", "123");
    System.out.println("s3 : " + s3);
    // OR
    String s4 = newurl.replace("$1", "123");
    System.out.println("s4 : " + s4);       
}

}

使用的方法说明:

Pattern.quote(String s):返回文本模式String           指定字符串。此方法生成可用于的String           创建一个与字符串s匹配的模式,就好像它是一样           文字模式。输入中的元字符或转义序列           序列将没有特殊含义。

Matcher.quoteReplacement(String s):返回文字替换           指定String的字符串。此方法生成一个String           将作为appendReplacement方法中的文字替换           Matcher类。生成的String将匹配序列           s中的字符被视为文字序列。斜杠('\')和           美元符号('$')将没有特殊含义。

String.replaceAll(String regex,String replacement):替换每个           此字符串的子字符串与给定的正则表达式匹配           给予替换。

调用str.replaceAll形式的此方法(regex,repl)           得到与表达式

完全相同的结果

Pattern.compile(正则表达式).matcher(STR).replaceAll(REPL)

请注意替换中的反斜杠()和美元符号($)           字符串可能会导致结果与正确的结果不同           被视为字面替换字符串;见Matcher.replaceAll。使用           Matcher.quoteReplacement(java.lang.String)压制特殊           如果需要,这些字符的含义。

String.replace(CharSequence目标,CharSequence替换):           替换此字符串中与文字匹配的每个子字符串           具有指定文字替换序列的目标序列。该           替换从字符串的开头到结尾,为           例如,在字符串“aaa”中将“aa”替换为“b”将导致           “ba”而不是“ab”。