java - 在java中查找和替换字符串模式

标签 java regex string

我使用正则表达式和字符串 replaceFirst 来替换下面的模式。

String xml = "<param>otpcode=1234567</param><param>password=abc123</param>";


if(xml.contains("otpcode")){
    Pattern regex = Pattern.compile("<param>otpcode=(.*)</param>");
    Matcher matcher = regex.matcher(xml);
    if (matcher.find()) {
        xml = xml.replaceFirst("<param>otpcode=" + matcher.group(1)+ "</param>","<param>otpcode=xxxx</param>");
    }
}
System.out.println(xml);

if (xml.contains("password")) {
    Pattern regex = Pattern.compile("<param>password=(.*)</param>");
    Matcher matcher = regex.matcher(xml);
    if (matcher.find()) {
            xml = xml.replaceFirst("<param>password=" + matcher.group(1)+ "</param>","<param>password=xxxx</param>");
    }
}
System.out.println(xml);

期望的 O/p

<param>otpcode=xxxx</param><param>password=abc123</param>
<param>otpcode=xxxx</param><param>password=xxxx</param>

实际 o/p(在第一个 IF 本身中一次性替换整个字符串)

<param>otpcode=xxxx</param>
<param>otpcode=xxxx</param>

最佳答案

你需要做一个非贪婪的正则表达式:

<param>otpcode=(.*?)</param>
<param>password=(.*?)</param>

这将匹配第一个 </param>不是最后一个...

关于java - 在java中查找和替换字符串模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386076/

相关文章:

java - 在 Tomcat 下重启项目后调试时无法识别更改的文件

javascript - 提取括号之间的字符串

python - 用于将可选参数匹配为字符串中的组的正则表达式

string - 将输入流转换为 ASCII : explanation of Prolog code

java - 如何拆分/解析 Java 字符串以清晰地显示项目符号点?

Java导入Excel数据到MySQL关于编码

java - Spring 数据JPA : Invalid object name if use more than one Config Class in jUnit test

regex - 英国手机和英国固定电话正则表达式

regex - 保留 URL 的第一部分并屏蔽其他所有内容

c# - 如何格式化字符串?