[只是一个字符,因此无论第一个表达式中后向组的明显最大长度是多少,似乎最大长度应该是1 +。是什么赋予了?
关键是, “无论第一个表达式中后向组的明显最大长度是多少” ,这 都不是
显而易见的。拳头的规则是,你不能使用
+或者
*一个向后看的内部。这不仅对于Java的正则表达式引擎如此,而且对于更多PCRE风格的引擎(甚至Perl的(v5.10)引擎!)也是如此。
您可以提前进行以下操作:
Pattern p = Pattern.compile("(?=(\[[a-z]+]))");Matcher m = p.matcher("] [abc] [123] abc]");while(m.find()) { System.out.println("Found a ']' before index: " + m.end(1));}(即,可以使用前瞻(!)内的捕获组来获取end(...)
该组中的捕获组)
将打印:
在索引前找到一个“]”:7
编辑
而且,如果您有兴趣替换此类
],可以执行以下操作:
String s = "] [abc] [123] abc] [foo] bar]";System.out.println(s);System.out.println(s.replaceAll("(\[[a-z]+)]", "$1_"));它将打印:
] [abc] [123] abc] [foo]条]] [abc_ [123] abc] [foo_ bar]



