2016-01-23 42 views
3

我有一個C#正則表達式,我想匹配7個字符:爲什麼我的C#正則表達式要求7個字符接受8個字符?

string digits4 = "\\d{4}"; 
string allowable3 = "[a-zA-z0-9 $%&#?+=!]{3}"; 
Regex regex1 = new Regex(digits4 + allowable3); 

allowable3是爲了匹配三個字母,數字或任何後續字符。但是,下面的返回true:

regex1.IsMatch("1234abc^") 

這讓我困惑的原因有兩個:

  1. 匹配的模式有8個字符。
  2. allowable3不包含「^」。 我必須在我的「positive character group」(方括號內的部分)內進行一些額外的意外通配符匹配,但我沒有看到它。
+0

使用錨點^和$圍繞模式。當模式未被錨定時,IsMatch搜索部分匹配。 –

+1

你需要使用'^'和'$'來匹配完整的字符串,而不僅僅是檢查字符串的某個部分是否滿足正則表達式。 – Tushar

回答

4

使用錨點^和$圍繞模式要求全字符串匹配。當模式未被錨定時,IsMatch搜索部分匹配。

您的A-z模式不僅僅匹配字母,還匹配^和其他一些符號。您需要將其更改爲A-Za-z。

string allowable3 = "[a-zA-Z0-9 $%&#?+=!]{3}"; 
Regex regex1 = new Regex("^" + digits4 + allowable3 + "$"); 
+0

對不起,以後會在手機上添加格式和參考。 –

+0

主播部分是我失蹤的概念。 「A-z」是一個我可能花了一個多小時才能看到的錯字,之後我會開始打我自己的頭腦和詛咒。謝謝你們倆! – kc2001

+1

更喜歡'\ p {Letter}'的另一個好理由。 – darch

相關問題