2

これは、本番コードの最初の正規表現です。これまで、自分で書くことを常に避けてきましたが、期待どおりに実際に機能するかどうか少し心配です。私はそれを壊そうと何度も試みましたが、特に経験がゼロの場合、これに頼りたくありません.

私の正規表現はこのパターンと正確に一致するはずです

  • 最初の文字はいずれかの文字でなければなりません (大文字と小文字は区別されません) -K,C,M,X,S,W
  • 2 番目の文字は からの数字でなければなりません0-9
  • ハイフン-
  • 4 文字の英数字 (A-Zまたは0-9) (大文字と小文字は区別されません) および
  • 1 文字 ( A-Z) (大文字と小文字は区別されません)。

以上です。短くすることも、長くすることもできません。このパターンに正確に一致する必要があります。私が今持っているのはこれです:

string RegExPattern = @"^(K|C|M|X|S|W){1}[0-9]{1}[-]{1}[A-Z0-9]{4}[A-Z]{1}$";
if (!Regex.IsMatch(txtCode.Text, RegExPattern, RegexOptions.IgnoreCase))
{
    MessageBox.Show("Fail");
    return false;
}

正規表現の動作を検証するツールやその他の方法はありますか?この正規表現は、上記で説明した一致パターンに対して正しいですか?

4

3 に答える 3

6

はい、そうです。

ただし、すべて{1}冗長です。|演算子を使用する代わりに最初の文字のセットを作成できます。ダッシュのセットは必要ありません。

string RegExPattern = @"^[KCMXSW][0-9]-[A-Z0-9]{4}[A-Z]$";

正規表現を記述してテストするためのツールはありますが、それらを使用して、考えられる入力のバリエーションをテストすることしかできず、すでにそれを行っているようです。

于 2013-03-19T11:52:15.323 に答える
4

正規表現を検証および開発するための優れたツール: http://www.debuggex.com。それでも、一連の単体テストを使用して正規表現を具体化することをお勧めします。

于 2013-03-19T11:50:47.187 に答える
2

最適なツールは、一連の単体テスト、または数十個のテキスト チャンクを反復処理する 1 つのテストです。

このパターンが使用されるデータに似た一連のテキスト行を含むテキスト ファイルを作成します。一部の行が一致し、一部の行がルールの異なる部分に一致することを確認してください (例: 最初の文字以外のすべてに一致するパターン、最後の文字以外のすべてに一致するパターン、2 文字または 3 文字のみのパターン)。 4つ以上など

次に、テキストの各行を読み取り、それに対して式を実行する小さなプログラムを作成します。一致する行の行番号を出力し、その番号のリストを予想される結果と比較します。

于 2013-03-19T11:53:29.990 に答える