0

次のユースケースでReg式を使用できますか?

次の条件を満たす必要があるStringパラメーターを受け取るブールメソッドを作成する必要があります。

  • 20文字の長さの文字列。
  • 最初の9文字は数字になります
  • 次の2文字はアルファベットになります
  • 次の2文字は数字になります。(1から31または99)
  • 次の1文字はアルファベットになります
  • 最後の6文字は数字になります。

この中で、私は最初の要件のコードを書きました: [a-zA-Z0-9]{20} -この式は最初のケースでうまく機能します。要件全体を満たすために完全なreg式を作成する方法がわかりません。助けてください。

4

4 に答える 4

2

はい、これに正規表現を使用することは可能です。

「20文字」の部分は無視して、9桁、2文字、2桁、1文字、および別の桁を連結して作成された文字列を記述します。

  • 文字列startで開始します。^
  • 次に9桁。\d文字セットをわかりやすく説明しているので[0-9]\d{9}「9桁」を意味します
  • それから2文字。\wクラスが広すぎるので、手紙に固執して[a-zA-Z]ください。
  • 次に、さらに2桁。それらは制限されたセットからのものであるように思われるので、交互にグループ化してセットを説明します。
  • 次に、別の文字と別の数字。
  • そして最後に、文字列の最後で終了する必要があります。$

参考までに、この正規表現は「文字列は9文字、次に12-15または99、次に別の文字」を意味します。

^[a-zA-Z]{9}(1[2-5]|99)[a-zA-Z]$
于 2012-11-15T10:22:03.650 に答える
1

String JavaDocs、特にString.matches()に関する部分と、Javaの正規表現に関するドキュメントをお読みください。

于 2012-11-15T10:15:12.300 に答える
0

最初の要件は残りの要件にすでに暗黙的に含まれているので、スキップします。次に、各部分に次々に一致する正規表現コードを記述します。

[0-9]{9}[a-zA-Z]{2}...

1から31になる可能性のある数には、特別な考慮事項が1つあります。これを1つの正規表現で一致させることは可能ですが、冗長で理解するのは困難です。代わりに、正規表現で基本的なマッチングを実行し、この部分を括弧で囲んでキャプチャグループとして抽出します。

([0-9]{2})

とを使用PatternMatcherて正規表現を適用し、文字列がパターンに一致する場合は、2文字を簡単に取得しInteger.parseInt()、整数に変換するために使用できます(2文字は数字であることがわかっているため、完全に安全です)。その後、通常どおり値を確認します。

于 2012-11-15T10:22:43.637 に答える
0

この正規表現は

  ^[0-9]{9}[a-zA-Z]{2}([1-9]|[1-2][0-9]|3[0-1]|99)[a-zA-Z]([0-9]{6})$

開始時に9文字、2つのアルファベット、1〜31または99の数字、アルファベット、6桁の数字を取ります。

于 2012-11-15T10:59:49.177 に答える