Java 用另一个正则表达式替换正则表达式
我想用java中的正则表达式替换一些正则表达式,例如 要求: 输入:xyxyxyP 所需输出:xyzxyzxyzP 表示我想将“(for)+\{”替换为“(for\{)+\{”。有什么方法可以做到这一点吗 我尝试了以下代码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";
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
。replaceAll(“xy |(?!P)[^x]*(?:x(?!y)[^x]*)*(?=.*P)”,“$0z”)
。