2016-07-23 71 views
0

我正在檢查StringPatterns。 這是正則表達式:正則表達式很奇怪。我錯過了什麼?

Regex regEx = new Regex("(\\d{4}/\\d{1})"); 

文字的例子是這樣的:1234/5,1234/6,1234/8。一切正常,直到出現像「1234/89」這樣的字符串,並且匹配的結果仍然爲真。我錯過了什麼?我也有過這樣的正則表達式:

Regex regEx = new Regex("(\\d{4}/\\d{1}\\W)"); 

的問題,這個人有我作爲一個不匹配所提到的例子,爲此他們標記錯誤。

+0

爲什麼不使用/ d +代替具體指定{4}位數和{1}位數。 89中的最後九個被丟棄,因爲你只是在尋找一個數字而不是兩個數字。 – jdweng

+0

提示:在字符串之前使用@不必轉義「\」,這會使整個事情更加混亂。 –

回答

4

你錯過了一個事實,即你的正則表達式應該總是匹配整個字符串,但在你的情況下,即使是字符串的一部分也是匹配的。使用開始/結束錨:

^(\\d{4}/\\d{1})$ 
+1

謝謝!這是一個典型的例子,因爲不能看到樹林和尷尬的森林。 –

-2
static void Code() { 

    Regex regEx = new Regex(@"(\d{4}/\d{1,2})"); 

    foreach (string input in new string [] { 
     "1234/5", "1234/6", "1234/8", "1234/89" 
    }) 
     Console.WriteLine (regEx.IsMatch (input)); 

    /* 
     True 
     True 
     True 
     True 
    */ 

} 
+1

最後一個字符串應該返回'false'。 –

+0

注意\ d {1,2}一個或兩個匹配 – marsouf

+1

不可以 - OP的目標是*不匹配'1234/89'。 – nicael