-1

次の条件でJavaの助けを借りて1つの正規表現を作成したい。

彼らはLeaveアプリです

(1) CL
(2) RH

文字列の正規表現を書きたい

CLCLRHRHCL

どんな組み合わせでもRH not more than 2

だからこれを書いて

^([CL]* | ?> [RH]{1,4})*$

しかしRH 2条件が機能していません


こんにちは、この質問にもう少し明確に追加したいと思います

文字列が固定されていません

CLCLRHRHCL

文字列は RH で始まる場合もあります

お気に入り

RHCLCLRHCLCLRHCLRH

または任意の組み合わせ

しかし、すべての文字列でRHが2を超えないようにしたいのですが、Javaドキュメントや他の正規表現の本を読んでいましたが、まだ解決策が見つかりませんでした。

私の正規表現は:

^([CL] |[RH]{1,4}) $

この正規表現: ^[CL]*|[RH]{1,4}$

正常に動作していますが、* を追加すると、RH 条件が機能しなくなります。

注:スペースについて心配しないでください。入力にスペースを提供するつもりはありません。

4

1 に答える 1

5

正規表現のチュートリアルを読む必要があります。

そうしないと、正規表現はコンパイルされません(コードのコンパイルと正規表現のコンパイルの違いに注意してください)が、コンパイルされたとしても、以下のような同様の議論が成立します。

^([CL]* | ?> [RH]{1,4})*$

次のことを意味します。

  • 文字列の開始 ( ^)
  • 次の 0 個以上が続きます: ( (...)*)
    • 次のいずれか: ( ...|...)
      • C または L ( ) の0 個以上の文字[CL]*、次にスペース( " ") (はい、スペースは問題ありません)
      • オプションのスペース( " ?")の後に"> "、R または H ( [RH]{1,4})
        のいずれかである 1 ~ 4 文字が続き(?>...) ます。
  • 続いて文字列の末尾 ( $)

これはうまくいくはずです:

^(CL)*(RH(CL)*){0,2}$

説明:

  • 文字列の開始 ( ^)
  • 0 個以上の"CL"文字列が続く ( (CL)*)
  • 次の0 ~ 2 ( {0,2}) が続きます。
    • 文字"RH"
    • 0 個以上の"CL"文字列が続く ( (CL)*)
  • 続いて文字列の末尾 ( $)

よりわかりやすいバージョン:

^(CL)*(RH)?(CL)*(RH)?(CL)*$

説明:

  • 文字列の開始 ( ^)
  • 0 個以上の"CL"文字列が続く ( (CL)*)
  • オプションの"RH"文字列 ( RH?)が続きます
  • 0 個以上の"CL"文字列が続く ( (CL)*)
  • オプションの"RH"文字列 ( RH?)が続きます
  • 0 個以上の"CL"文字列が続く ( (CL)*)
  • 続いて文字列の末尾 ( $)

参照

于 2013-03-13T14:39:07.540 に答える