这是我的第一篇文章。我在Java中遇到String问题。我想使用正则表达式。预先感谢您的任何帮助。
我的字符串是:
String str = "abXYxyzXYZabXasdfggXYZ".
我想将所有字符替换为“ +”,但不能将其替换为以下变量:
String word = "XYZ"
所以输出应该是这样的:
+++++++XYZ+++++++++XYZ.
我开始时:
str.replaceAll("[^" + word + "]", "+")
但是我得到了这样的不同输出:
++XY+++XYZ++X++++++XYZ
最佳答案
简要
这实际上可以实现。因为Java不允许使用正则表达式If子句,所以这是一种有趣的方法,但是实际上您可以在否定先行之内使用先行和后进的组合来模仿某种If子句。
码
See regex in use here
(?!(?:(?=XYZ)|(?<=X)(?=YZ)|(?<=XY)(?=Z))).
替换:
+
用法
下面的代码是从regex101自动生成的。
请参阅以下使用中的代码here
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "(?!(?:(?=XYZ)|(?<=X)(?=YZ)|(?<=XY)(?=Z))).";
final String string = "abXYxyzXYZabXasdfggXYZ";
final String subst = "+";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);
System.out.println("Substitution result: " + result);
结果
输入项
abXYxyzXYZabXasdfggXYZ
输出量
+++++++ XYZ +++++++++ XYZ
说明
(?!(?:(?=XYZ)|(?<=X)(?=YZ)|(?<=XY)(?=Z)))
负向前瞻,确保后面的内容不匹配(?:(?=XYZ)|(?<=X)(?=YZ)|(?<=XY)(?=Z))
匹配以下任一(?=XYZ)
正向前瞻确保后面的内容与XYZ
完全匹配(?<=X)(?=YZ)
符合以下条件(?<=X)
确定后面的积极回溯字面上是X
(?=YZ)
积极向前看,确保后面的内容是YZ
(?<=XY)(?=Z)
符合以下条件(?<=XY)
确定后面的积极回溯字面上是XY
(?=Z)
积极向前看,确保后面的内容是Z
.
匹配任何字符