0

指定された文字列が有効な形式であることを確認する式を作成しようとしていますが、数か月以内に正規表現を使用しないと、学んだことをすべて忘れて再学習する必要があるようです。

私の式は次のような形式に一致するはずです: 010L0404FFCCAANFFCC00M000000XXXXXX 4 つの区切り文字は (L、N、K、M) で、0-9A-F の 16 進数の範囲に収まらず、一意性がその順序であるか、リストにないかを示します。各区切り文字は一度しか存在できません!

これは次のように分解されます。

  • 3 桁の数字で始まります。これは単に ^([0-9]{3}) であり、常に必要です。
  • 2 番目のセットは L で始まり、2 桁 + 2 桁 + 16 進数の 6 である必要があり、オプションです
  • 3 番目のセットは N で始まり、6 桁の 16 進数である必要があり、オプションです
  • 4 番目のセット K は任意の数値であり、オプションです。
  • 5 番目のセットは M であり、任意の 6 つの 16 進数または XXXXXX を使用して、何も示さないことを示します。336699 (6) または 336699XXXXXXFFCC00 (18) のように、0 を除く 6 の倍数にする必要があり、オプションです。

私が理解できない最も難しい部分は、その順序でそれを必要とし、倍数で、L区切り文字が前に来なければならず、そこにある場合は常にKが必要です(理由は、同じ文字列のバリエーションを取得しないためです。つまり、同じことを意味します)区切り文字が入れ替わったもの)。私はすでにそれを解析できます。文字列が正しい形式であることを確認したいだけです。

どんな助けでも感謝します、ありがとう。

4

2 に答える 2

1

注文を要求することはそれほど悪くはありません。各セットをオプションにするだけです。正規表現は引き続き順番に一致するため、たとえばLセクションがなく、次の文字がNの場合、残りの正規表現のいずれとも一致しないため、後でLが発生することはありません。

要件を直接翻訳すると、次のようになります。

^([0-9]{3})(L[0-9]{4}[0-9A-F]{6})?(N[0-9A-F]{6})?(K[0-9]+)?(M([0-9A-F]{6}|X{6})+)?$

最初の3桁を除いて各グループをオプションにし、Mブロックの6桁の2つのパターンの内部代替を追加するだけで、実際のトリックはありません。

于 2013-03-18T07:09:37.470 に答える
1
^([0-9]{3})(L[0-9]{4}[0-9A-F]{6})?(N[0-9A-F]{6})?(K[0-9]+)?(M([0-9A-F]{6})+|MX{6})$
于 2013-03-18T07:09:20.670 に答える