用另一个正则表达式替换正则表达式

时间:2016-01-22 11:21:52

标签: java regex

我想用java中的regex取代一些正则表达式,例如

要求:

输入:xyxyxyP

必需输出:xyzxyzxyzP

表示我想替换"(for)+ \ {"到"(对于\ {)+ \ {" 。有没有办法做到这一点?

我尝试过以下代码

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class ReplaceDemo2 {

    private static String REGEX = "(xy)+P";
    private static String INPUT = "xyxyxyP";
    private static String REGEXREPLACE = "(xyz)+P";

    public static void main(String[] args) {
        Pattern p = Pattern.compile(REGEX);
        // get a matcher object
        Matcher m = p.matcher(INPUT);
        INPUT = m.replaceAll(REGEXREPLACE);
        System.out.println(INPUT);
    }
}

但输出为(xyz)+ P

1 个答案:

答案 0 :(得分:1)

您可以使用基于\G的正则表达式来实现它:

String s = "xyxyxyP";
String pattern = "(?:(?=xy)|(?!^)\\G)xy(?=(?:xy)*P)";
System.out.println(s.replaceAll(pattern, "$0z")); 

查看regex demoan IDEONE demo

简而言之,正则表达式匹配:

  • (?:(?=xy)|(?!^)\\G) - 位置跟随xy(?=xy))或上一次成功匹配后的位置((?!^)\\G
  • xy - 一系列文字字符xy,但只有在跟随...时才会...
  • (?=(?:xy)*P) - 零个或多个xy序列(由于(?:xy)*)后跟P