-3
BEGIN A B C END | A B C

上記の正規表現は、BEGIN と END で囲まれていないか、どちらBEGIN A B C ENDかに一致するはずです。A B Cのように名前付きグループを使用しているときに A の後にあると仮定すると(?<ImAfterTheA>A)、Java では、最初の A に 2 番目の A とは異なるグループ名を付ける必要があります。

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

だから...私はこれを短くしたいと思いました:

BEGIN? A B C END?

しかし、これはA B Cor BEGIN A B Cor A B C ENDorBEGIN A B C ENDに一致し、私が意図したよりも大きな言語に効果的に一致します。

言語を広げずに、一致するグループに 2 つの異なるグループ名を使用しないように、より簡潔にできますか?

4

1 に答える 1

0

この正規表現は、私があなたが望むと思うことを行います:

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

これは、末尾の BEGIB および END と一致するか、両端のBEGIN または END のいずれとも一致しません。つまり、ラッパーの 1 つが存在する場合、両方が存在する必要があります。

  • 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 に答える