Java 正则表达式在复杂括号外查找特定字符串
如果我想得到单词TEST、BEST、FEST,如果在花括号外找到,我会使用以下正则表达式:Java 正则表达式在复杂括号外查找特定字符串,java,regex,Java,Regex,如果我想得到单词TEST、BEST、FEST,如果在花括号外找到,我会使用以下正则表达式: ^(?:[^\{]*(?:\{.*\})*)(?:(?:[^\{]*(TEST|BEST|FEST))|(?:.*(TEST|BEST|FEST)(?!\}))) 看 但是如果我想在复杂的括号外找到这些单词,比如在{[something}之外,该怎么办呢。 示例: {[TEST}-有效,因此不匹配 {[}{[BEST}-有效,因此不匹配 bla{[}{[FEST}-有效,因此不匹配 测试-无效,因为它的
^(?:[^\{]*(?:\{.*\})*)(?:(?:[^\{]*(TEST|BEST|FEST))|(?:.*(TEST|BEST|FEST)(?!\})))
看
但是如果我想在复杂的括号外找到这些单词,比如在{[something}之外,该怎么办呢。
示例:
问题是,对于一个字符{我可以很容易地使用
[^\{]*
来排除它。如何使用多个字符,即一个单词:{[您可以使用一个捕获组来获取所需的值,然后与所有其他值进行匹配。换句话说,匹配并捕获所需的值,然后与不需要的值进行匹配。获取组1的值
\{\[[^}]*}|(TEST|BEST|FEST)
见
\{\[^}]*}
匹配到第一个}
为止的{[
以外的任何0+字符,以及您不需要的这些值。您需要的值在组1中
示例代码:
List<String> strs = Arrays.asList("{[TEST}", "{[} {[BEST}", "bla {[} {[FEST}", "TEST","{[} {[FEST", "bla {[} hi {[} TEST} {[}");
for (String str : strs)
{
Matcher m = Pattern.compile("\\{\\[[^}]*}|(TEST|BEST|FEST)").matcher(str);
while(m.find()) {
if (m.group(1) != null) {
System.out.println(m.group(1) + " found in '" + str + "'");
}
}
}
请参见匹配并捕获您需要的内容,然后只匹配您不需要的内容。获取组1的值。请注意,
(TEST | BEST | FEST)
可以仅通过([TBF]EST)
进行匹配,因此如果您需要匹配这些文本,请使用此选项。非常感谢。{[%%TEST%%TEST%{[%%TEST%}呢?我们也可以匹配这个吗?第一个测试在括号外。如果在关闭当前括号之前启动新括号,我们可以匹配吗?例如,可以,您可以使用一个新括号:,或该括号的展开版本:(字符串越长,它应该越快)。
List<String> strs = Arrays.asList("{[TEST}", "{[} {[BEST}", "bla {[} {[FEST}", "TEST","{[} {[FEST", "bla {[} hi {[} TEST} {[}");
for (String str : strs)
{
Matcher m = Pattern.compile("\\{\\[[^}]*}|(TEST|BEST|FEST)").matcher(str);
StringBuffer result = new StringBuffer();
while(m.find()) {
if (m.group(1) != null) {
m.appendReplacement(result, "NEW_"+m.group(1));
} else {
m.appendReplacement(result, m.group(0));
}
}
m.appendTail(result);
System.out.println(result.toString());
}