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");
在中,请参见底部的替换
解释
匹配一个或多个数字(这是捕获组1)(\d+)
锚点断言我们在字符串的末尾$
- 我们将替换为
和组1,/user/?user=
$1
$
"/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是什么。。。