C#正则表达式未正确启动

本文关键字:启动 正则表达式 | 更新日期: 2023-09-27 18:21:03

我为C#(3.5)ASP.NET web应用程序编写了一堆正则表达式。无论如何,我都不是高级正则表达式用户。我正在排除一个让我完全困惑的问题,为什么它不起作用。尤其是因为我有一些类似的产品运行良好。

以下是详细信息。感谢您的时间和善意的帮助。

我的应用程序采用两个单独的值。如果这两个值一起匹配一组预定义的规则,那么它们就会映射到某个值。

我已经定义了一些规则(注意:这些规则只是我自己编的,没有编程意义):

要素1:Cxxxx*####

元素2:Czzz*####

对于元素1:这意味着这个序列必须以"C"开头。接下来的4个字符(四个X)是字母数字。星号表示可以是("R"或"D")。#符号表示它可以是任意4个字母数字字符的序列。

对于元素2:这意味着这个序列必须以"C"开头。接下来的4个字符(四个Z)是字母数字。星号表示可以是("R"或"D")。#符号表示它可以是任意4个字母数字字符的序列。

在这两个元素之间,X和Z只是意味着4个字符的序列不能相同。两者之间必须是唯一的。

因此,这两个元素违反了规则,因为"1491"在序列中的同一位置重复。

要素1:C1491D1234

要素2:C1491D5678

这个将返回true,因为考虑到序列的规则,它应该是好的:

要素1:C1491D1234

要素2:C1599D5678

这个将返回true,因为考虑到序列的规则,它应该是好的:

要素1:C1491D1234

要素2:C1599D1234

这是我用来创建这个规则的正则表达式:

C([A-Za-z0-9]{4})[DdRr][A-Za-z0-9]{4}-C(?!''1)[DdRr][A-Za-z0-9]{4}

这是我用来测试条件的两个元素:

要素1:C1491D1491

要素2:C1000R4100

出于某种原因,我的正则表达式是错误的,并且没有返回true。

这就是我的C#程序如何看待序列:C1491D1491-C1000R4100

我一直在使用这个网站来测试:

http://regexhero.net/tester/

C#正则表达式未正确启动

您缺少匹配第二个括号的peice第一个字母数字集

C([A-Za-z0-9]{4})[DdRr][A-Za-z0-9]{4}-C(?!'1)([A-Za-z0-9]{4})[DdRr][A-Za-z0-9]{4} 

匹配测试字符串。我发现这个regex测试程序也很好:)http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx.话虽如此,我确信有一种更有效的方式来编写regex

您的正则表达式有一个细微的缺陷。(?!'1)是一个负前瞻:它检查第一个反向引用是否重复,但不会使用新序列。你可以这样修复你的代码:

@"C([A-Za-z0-9]{4})[DdRr][A-Za-z0-9]{4}-C(?!'1)[A-Za-z0-9]{4}[DdRr][A-Za-z0-9]{4}"