2015-04-23 132 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#解決方案並向您解釋。 –