在Java程序界定,我想找出这些子给定的字符串中所有出现:$$或$ \ d(符号“$”后跟一个整数)。匹配字符串中的某些关键字不是由某些字符
我的问题开始时,我增加了一个额外的限制,指出只有在匹配字符串不是由某些字符序列限制的子串的一部分发生匹配。
例如,我想忽略匹配,如果它们是由“/ {”和“/}”所包围的字符串的一部分。
以下示例将带出所有出现的$$或$ \ d,但不考虑忽略匹配的附加约束(如果它位于“/ {”和“/}”内部)。
public static final String PARAMETERS_PREFIX = "$";
public static final String ALL_PARAMS_SUFFIX = "$";
public static final String BEGIN_JAVA_EXPRESSION = "/{";
public static final String END_JAVA_EXPRESSION = "/}";
...
String test = "$1 xxx $$ " //$1 and $$ are matches
+ BEGIN_JAVA_EXPRESSION + "xxx $2 xxx" + END_JAVA_EXPRESSION; //$2 SHOULD NOT be a match
Set<String> symbolsSet = new LinkedHashSet<String>();
Pattern pattern = Pattern.compile(Pattern.quote(PARAMETERS_PREFIX)+"(\\d+|"+Pattern.quote(ALL_PARAMS_SUFFIX)+")");
Matcher findingMatcher = pattern.matcher(test);
while(findingMatcher.find()) {
String match = findingMatcher.group();
symbolsSet.add(match);
}
return new ArrayList<String>(symbolsSet);
除了发现不能确定的子部分的关键字,我希望能够通过一定值后只更换这些关键字。 然后,在进行匹配之前删除分隔字符之间的所有内容的选项可能无济于事,因为之后我需要能够获取原始字符串,并将匹配的标记替换为某些值,并且分隔区域内的标记应该留下未经修改。 这应该很容易,如果我找到了正确的正则表达式。
是否有人可以给我一个关于如何编写正确的正则表达式这个问题的暗示?
+1谢谢您的回答@ControlAltDel。然而,我忘了在问题中说,以后我需要用其他值替换匹配的字符串(我刚刚更新了它)。我认为只有一个正则表达式是理想的。不知道如何找到我使用多个正则表达式的关键字。 – Sergio
我没有看到如何找到使用我建议的3个正则表达式的位置比使用1个正则表达式更复杂。但你知道你的问题比我更好... – ControlAltDel
我想说的是,我正在寻找一个正则表达式,我可以使用它们来查找匹配,以及之后替换某些值的标记。所以我可以做一些像test.replaceAll(“killerRegex”,“newValue”)。 “killerRegex”将忽略周围区域的匹配。 – Sergio