gpt4 book ai didi

java - 匹配字符串中未被特定字符分隔的特定关键字

转载 作者:行者123 更新时间:2023-11-29 03:47:02 25 4
gpt4 key购买 nike

在 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 个正则表达式?它可能不那么性感,但你可以很容易地用 3 个正则表达式来做到这一点。(这些不是实际的正则表达式)1. 获取您要查找的字符串 ($$ | ${num})2.对于'/{'3. 对于 '/}'

匹配 2 和 3 中的无效区域应该相当容易。然后您可以使用这些跨度来消除 1 中的结果

关于java - 匹配字符串中未被特定字符分隔的特定关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10420118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com