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/
您缺少匹配第二个括号的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}"