2015-04-23 99 views
0

目前我不希望下面的字符串传递正则表达式正则表达式表达错误

REFER TO MTF#Y2015-19555 

正则表达式是

(.)\\1{2,} 

image1

我附上照片出现了,这不可能通过正则表达式, 我的程序现在发生了,这个字符串匹配正则表达式,我想知道它发生了什么

image2

+1

符合字符串的标准是什么?现在,您正在捕获一个重复2次或更多次的符号,因此会捕获“555”。第一张屏幕截图显示您的测试存在问题:您使用双反斜杠,而您应该使用1. –

+0

实际上这不是我的项目,我正在尝试增强它,并且 参考MTF#Y2015-19555 不可能匹配这个正则表达式, 但.net framework 2.0正则表达式让它通过这个正则表达式 –

回答

0

我认为你的问题是,正则表达式模式是由你的正则表达式测试器和.NET Framework不同。在代码中使用模式时,必须记住,您的字符串将被检查转义字符。

当你的正则表达式测试仪得到(.)\\1{2,},.NET框架Regex得到(.)\1{2,}因为"\\"变得\。您可以通过更改您的模式来修复此问题,如string pattern = "(.)\\\\1{2,}";或使用string pattern = @"(.)\\1{2,}";禁用转义字符。

您可以通过考虑另一种模式(如\w)来查看差异。因为"\w"包含未知的转义序列(串在开发时进行评估)

Regex.Match("\w", myTestString); 

这将导致一个编译器错误。为了解决这个错误,我在字符串前添加了@,编译器得到满足。

Regex.Match(@"\w", myTestString); 

在你的情况,因为"\\"仍然是一个有效的字符串,你没有得到一个错误。但正如您所遇到的,

Regex.Match("\\", myTestString); 
Regex.Match(@"\\",myTestString); 

可能会导致不同的结果。

+0

好吧,让我解释一下我在这个问题上真正想要的是什么,我想知道为什么参考MTF#Y2015-19555这个字符串可以通过这个正则表达式, 我不希望它是通过,从图像本身它显示字符串是有效的这个正则表达式 –

+0

好的,让我试着解释它。在情况1(你的正则表达式测试工具)中:模式是'(。)\\ 1 {2,}'。这意味着,每个输入匹配女巫包含任何字符后跟一个'\\'和两个或更多'1's。第二种情况:模式(评估字符串)是'(。)\ 1 {2,}'。注意模式中缺少的'\\'。现在每个输入都匹配,其中包含由单个字符('.')组成的组(括号包围)。该组通过'\ 1'获取索引1。该组本身必须重复两次或更多次(不是任何但是相同的字符)。在'参考MTF#Y2015-19555''555'匹配。 –

0

如果你的目的是要禁止任何重复的数字,你可以设置一个条件整场比赛用负前瞻:

string pattern = @"^(?!.*(\d)\1.*$).+$"; 

在快报测试:

enter image description here

+0

我的答案解决了你的问题吗?正如我所说,你的原始正则表达式正在捕获一个重复2次或更多次的符号,因此捕获了'555'。我的正则表达式不允许随后的数字重复。请让我知道您的匹配标准是什么,我会很高兴展示C#解决方案并向您解释。 –