在 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);
除了查找不属于某些子字符串的关键字之外,我还希望之后能够仅用某些值替换那些关键字。然后,在进行匹配之前仅删除分隔字符之间的所有内容的选项可能无济于事,因为之后我需要能够获取原始字符串,并将匹配的标记替换为某些值,并且分隔区域内的标记应该保持不变。如果我找到了正确的正则表达式,这应该很容易。
有人可以给我一个关于如何为这个问题编写正确的正则表达式的提示吗?