Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证我的正则表达式是否按预期工作_C#_Regex - Fatal编程技术网

C# 验证我的正则表达式是否按预期工作

C# 验证我的正则表达式是否按预期工作,c#,regex,C#,Regex,这是我的第一个用于生产代码的正则表达式,直到现在我一直避免自己编写它们,现在我有点担心它是否真的能像预期的那样工作。我做了很多尝试试图打破它,但我真的不想依赖它,尤其是当我没有经验的时候 我的正则表达式应该完全匹配这个模式 第一个字符必须是字母之一(不区分大小写)-K、C、M、X、S、W 第二个字符必须是0-9 连字符- 4个字母数字字符(A-Z或0-9)(不区分大小写)和 一个字母(A-Z)(不区分大小写) 就这样。它不能短,不能长,它必须完全符合这个模式。我现在拥有的是: string

这是我的第一个用于生产代码的正则表达式,直到现在我一直避免自己编写它们,现在我有点担心它是否真的能像预期的那样工作。我做了很多尝试试图打破它,但我真的不想依赖它,尤其是当我没有经验的时候

我的正则表达式应该完全匹配这个模式

  • 第一个字符必须是字母之一(不区分大小写)-
    K、C、M、X、S、W
  • 第二个字符必须是
    0-9
  • 连字符
    -
  • 4个字母数字字符(
    A-Z
    0-9
    )(不区分大小写)和
  • 一个字母(
    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;
}

是否有任何工具或其他方法来验证正则表达式的行为,以及此正则表达式是否符合我上面解释的匹配模式?

验证和开发正则表达式的好工具:。尽管如此,我还是建议您使用一系列单元测试来具体化正则表达式。

是的,这是正确的

但是,所有的
{1}
都是冗余的,您可以创建一组第一个字符,而不用使用
|
运算符,破折号不需要设置:

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

有编写和测试正则表达式的工具,但您只能使用它们来测试您能想到的输入中的任何变化,而且您似乎已经这样做了。

最好的工具是一套单元测试,或者是一个迭代几十个文本块的单次测试

创建一个文本文件,该文件包含一大堆文本行,这些文本行与此模式将针对的数据相似。确保有些行匹配,有些行不匹配规则的不同部分(例如:一个模式匹配除第一个字符外的所有字符,一个模式匹配除最后一个字符外的所有字符,一个模式仅包含2或3个字符,而不是4个字符,等等)


然后,编写一个小程序,读取每一行文本并对其运行表达式。让它打印匹配行的行号,然后将该数字列表与预期结果进行比较。

由于隐含了单个匹配,因此
{1}
是多余的。您还可以简化
(K | C | M | X | S | W)
[KCMXSW]
,您不需要在字符集中使用
-
(只需使用
-
)。根本不回答问题。@BennorMcCarthy:什么意思?@BennorMcCarthy:问题的一部分包括短语“这个正则表达式对于我上面解释的匹配模式正确吗?”.这个答案解决了这一部分。是的,这很公平,但问题的标题是“如何确保它完全按照预期工作”。谢谢,我所寻求的也是某种改进,因为我知道我没有以最好的方式编写正则表达式。这对于临时测试很好,但不是一个完美的全方位工具。我建议删除“完美”一词从答案来看。正则表达式可以自动测试,自动测试通常比手动测试更受欢迎,因为你可以更快更频繁地运行它们。@Bryan Oakley是的,你是对的。我非常喜欢单元测试,没有工具可以替代它们。我的答案是,这只是因为作者问的是一个工具。不幸的是ly:“这是一个测试版。它支持JavaScript正则表达式的子集。”…JavaScript风格只支持.NET正则表达式的子集。你可能会发现它更有用。@Alan Moore,是的,但它发展很快,甚至现在已经相当不错了。我还可以建议使用和。这些工具我也使用过,但比第一个工具少很多。