你好我一直试图取得一些不成功的替代
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美元,我该怎么办? 谢谢!
答案 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)
答案 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]+)$
捕获最后的数字。或强>
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”。