Java正则表达式替换

Java正则表达式替换,java,regex,replace,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-

你好,我一直在尝试做一些替换,但没有成功

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);
    }

}
我想把1美元换成123美元,我该怎么做?!
谢谢大家!

我想你在寻找这样的东西:

   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);
希望这有帮助。

压缩搜索:
*?(\d+)$
这就是您所需要的:

String replaced = yourString.replaceAll(".*?(\\d+)$", "/user/?user=$1");
在中,请参见底部的替换

解释

  • (\d+)
    匹配一个或多个数字(这是捕获组1)
  • $
    锚点断言我们在字符串的末尾
  • 我们将替换为
    /user/?user=
    和组1,
    $1
我想把1美元换成123美元,我该怎么做

只需使用方法,但不要忘记转义
$

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

您不需要在模式中输入整个文本。只有一个
^.\\/
将匹配到最后一个
/
符号。所以你的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]+)$
    捕获最后的数字

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

您需要将
/
放在
(\\d*)
之前,这样它就可以捕获从ie 123开始的数字。否则它将打印最后一个数字,即3。

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

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);       
}
}

使用方法说明:

模式。引号(字符串s):为 指定的字符串。此方法生成一个字符串,可用于 创建一个与字符串s匹配的模式,就像它是一个 文字模式。输入中的元字符或转义序列 序列将没有特殊意义

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

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

调用str.replaceAll(regex,repl)形式的此方法 生成与表达式完全相同的结果

Pattern.compile(regex).matcher(str).replaceAll(repl)

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

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

再说一遍。。一个简单的
split()
就可以了。。为什么要使用正则表达式?仅供参考:修复了一个小错误,并添加了正则表达式演示和说明。:)正如在regex演示中看到的,它给出了
/user/?user=3
,因为输出和问题是关于
将$1替换为123
。您好,您的示例非常好,但由于某种原因,我无法理解它返回的是“/user/?user=3”,而不是“/user/?user=123”,据我所知的“+”本来应该是多少,但它只替换一个数字。哦,这是一个打字错误,我错了。请将
*
更改为
*?
(请参阅更新的演示)。请告诉我是否有效,以及您是否有任何问题。:)更新后的示例在索引6.*(d+$)附近的线程“main”java.util.regex.PatternSyntaxException:Unmatched closing')中抛出一个异常。非常感谢您的回答,但是问题是,我必须自己完成这项工作,因为我并不总是知道该id是什么。。。