-3
BEGIN A B C END | A B C

上面的正则表达式应该匹配BEGIN A B C ENDA B C不匹配被 BEGIN 和 END 包围。假设在使用像 in 这样的命名组时在 A 之后(?<ImAfterTheA>A),在 Java 中,您需要为第一个 A 赋予与第二个 A 不同的组名。

BEGIN (?<ImAfterTheA_1>A) B C END | (?<ImAfterTheA_2>A) B C

所以......我想缩短这个并想出了:

BEGIN? A B C END?

但话又说回来,这将匹配A B CorBEGIN A B CA B C ENDor BEGIN A B C END,有效地匹配一种比我想要的更大的语言。

我可以在不扩大语言范围的情况下更简洁,从而避免匹配组使用两个不同的组名吗?

4

1 回答 1

0

这个正则表达式做我认为你想要的:

(BEGIN A B C END)| ((?<!BEGIN) A B C (?!END))

这与两端的 BEGIB 和 END 匹配,或者两端的BEGIN 或 END 都不匹配。换句话说,如果其中一个包装器存在,则两者都必须存在。

  • BEGIN A B C END匹配
  • foo A B C END不匹配
  • BEGIN A B C foo不匹配
  • foo A B C bar匹配
于 2013-01-08T20:50:50.517 回答