我想用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 。
答案 0 :(得分:1)
您可以使用基于\G
的正则表达式来实现它:
String s = "xyxyxyP";
String pattern = "(?:(?=xy)|(?!^)\\G)xy(?=(?:xy)*P)";
System.out.println(s.replaceAll(pattern, "$0z"));
简而言之,正则表达式匹配:
(?:(?=xy)|(?!^)\\G)
- 位置跟随xy
((?=xy)
)或上一次成功匹配后的位置((?!^)\\G
)xy
- 一系列文字字符xy
,但只有在跟随...时才会... (?=(?:xy)*P)
- 零个或多个xy
序列(由于(?:xy)*
)后跟P
。