4

正規表現は、長さが 2 ~ 3 文字で、A と B のみを含むすべての文字列と一致する必要があります ([AB]{2,3})。ただし、最大 1 つの B を含む文字列と一致する必要もあります。

許可された文字列:

ああ ああああああああああああああああああああああああああああああああああああああああ ああ ああ ああ
あああああ





禁止されている:

ABB <-- 2 つの B

単一の正規表現でこれを達成することは可能ですか? 私はそのようなことを試しました:

([AB]{2,3})(?<=([B]*A[B]*){2})

ただし、後読みグループの可変長をサポートしていないため、Java では機能しません。

スレッド「メイン」での例外 java.util.regex.PatternSyntaxException: 後読みグループには、インデックス 28 付近に明らかな最大長がありません ([AB]{2,3})(?<=([B]*A[B ]*){2})

助言がありますか?

4

3 に答える 3

4

否定先読みを使用して、文字列に が 2 つ含まれないようにすることができますB

^(?!.*B.*B)[AB]{2,3}$

見る

于 2012-06-01T11:37:22.563 に答える
2

まあ、オプションを個別にリストすることができます:

^(A{2,3}|A{1,2}B|ABA|BA{1,2})$
  ↑      ↑       ↑   ↑
  │      │       │   └─ starting with B
  │      │       └───── B in the middle
  │      └───────────── B at the end
  └──────────────────── only A
于 2012-06-01T11:39:59.657 に答える
0

これを試して

\b(?:A{1,2}B|BA{1,2}|A{2,3}|ABA?)\b
于 2012-06-01T11:40:32.740 に答える