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

Java 用另一个正则表达式替换正则表达式,java,regex,Java,Regex,我想用java中的正则表达式替换一些正则表达式,例如 要求: 输入:xyxyxyP 所需输出:xyzxyzxyzP 表示我想将“(for)+\{”替换为“(for\{)+\{”。有什么方法可以做到这一点吗 我尝试了以下代码 import java.util.regex.Pattern; import java.util.regex.Matcher; public class ReplaceDemo2 { private static String REGEX = "(xy)+P";

我想用java中的正则表达式替换一些正则表达式,例如

要求:

输入:xyxyxyP

所需输出:xyzxyzxyzP

表示我想将“(for)+\{”替换为“(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。

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

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

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

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

你能分享从“xyabxyP”获取“xyzabzxyzP”的规则吗?不知道模式是什么。试试
。replaceAll(“xy |(?!P)[^x]*(?:x(?!y)[^x]*)*(?=.*P)”,“$0z”)