【问题标题】:Replace regex characters [duplicate]替换正则表达式字符[重复]
【发布时间】:2014-01-15 11:15:48
【问题描述】:

我想将子字符串\\d+-\\d+ 替换为该字符串<!-- This is Siebel Order identified --> <tns:id> <tns:idValue>\\d+-\\d+</tns:idValue 中的随机生成数字。

我正在使用下面的代码

String REGEXSIEBEL = "<!-- This is Siebel Order identified --> <tns:id> <tns:idValue>\\d+-\\d+</tns:idValue>";
java.util.regex.Pattern p1 = java.util.regex.Pattern.compile(REGEXSIEBEL);
java.util.regex.Matcher m = p1.matcher(INPUT);

INPUT = m.replaceAll(REGEXSIEBEL.replaceAll(String.valueOf("\\d+-\\d+"), String.valueOf(randomInt)));

但它不起作用。

【问题讨论】:

  • 能否给个输入输出示例?

标签: java regex substring


【解决方案1】:

你需要使用Matcher#ewplaceAll(String replacement)

Pattern p1 = Pattern.compile("\\d+-\\d+");
Matcher m = p1.matcher(INPUT);
INPUT = m.replaceAll( String.valueOf(randomInt) );

【讨论】:

    【解决方案2】:

    您可以使用http://regex101.com/ 快速在线验证您的正则表达式,也许您还可以查看有关 java 正则表达式的本教程以供进一步参考:http://www.tutorialspoint.com/java/java_regular_expressions.htm

    下面是您手头任务的完整实现:​​

    String str = "<!-- This is Siebel Order identified --> <tns:id> <tns:idValue>84678468-00</tns:idValue>";
    String patternString = "<!-- This is Siebel Order identified --> <tns:id> <tns:idValue>\\d{8}-00<\\/tns:idValue>";
    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(str);
    
    StringBuffer sb = new StringBuffer();
    
    while(matcher.find()){
       String randomNumberTag = "<!-- This is Siebel Order identified --> <tns:id> <tns:idValue>"+
            Integer.toString((int)(Math.random() * 99999999))
            +"-00</tns:idValue>";
       matcher.appendReplacement(sb,randomNumberTag);
    }
    matcher.appendTail(sb);
    

    更新 前面的代码旨在用不同的随机数替换每个出现,如果你想用相同的随机数替换所有出现,请使用:

    String str = "<!-- This is Siebel Order identified --> <tns:id> <tns:idValue>84678468-00</tns:idValue>";
    String patternString = "<!-- This is Siebel Order identified --> <tns:id> <tns:idValue>\\d{8}-00<\\/tns:idValue>";
    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(str);
    
    String randomNumberTag = "<!-- This is Siebel Order identified --> <tns:id> <tns:idValue>"+
        Integer.toString((int)(Math.random() * 99999999))
                +"-00</tns:idValue>";
    System.out.println(randomNumberTag);
    if(matcher.find()){
        str = matcher.replaceAll(randomNumberTag);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      相关资源
      最近更新 更多