2011-04-04 104 views
0

[username]其中username是含長1到12個字符之間只有字母數字字符的任意字符串正則表達式模式 - 字母

我的代碼:

Regex pat = new Regex(@"\[[a-zA-Z0-9_]{1,12}\]"); 
MatchCollection matches = pat.Matches(accountFileData); 
foreach (Match m in matches) 
{ 
    string username = m.Value.Replace("[", "").Replace("]", ""); 
    MessageBox.Show(username); 
} 

給了我一個空白匹配

+1

注意你的語言。它是如何工作的? – 2011-04-04 16:04:40

+0

爲什麼兩組方括號? – Toby 2011-04-04 16:04:49

回答

4

這可以讓你的名稱中括號(比賽簡化版,包含在方括號符號) :

(?<=\[)[A-Za-z0-9]{1,12}(?=\]) 

你可以使用它像:

Regex pat = new Regex(@"(?<=\[)[A-Za-z0-9]{1,12}(?=\])"); 
MatchCollection matches = pat.Matches(accountFileData); 
foreach (Match m in matches) 
{ 
    MessageBox.Show(m.Value); 
} 
+0

完美的作品,謝謝! – Contra 2011-04-04 16:22:46

1

你有托架太多了。

[a-zA-Z0-9]{1, 12} 
+0

我還需要保留括號 – Contra 2011-04-04 16:05:52

+2

請澄清。 – 2011-04-04 16:06:40

2

你有太多的括號,你可能要匹配的字符串的開頭(^)和結束($)。

^[a-zA-Z0-9]{1,12}$ 

如果您希望在匹配的字符串中使用方括號,請使用反斜槓進行轉義。

\[[a-zA-Z0-9]{1,12}\] 

// In C# 
new Regex(@"\[[a-zA-Z0-9]{1,12}\]") 
0

如果你想匹配的括號,他們需要正確轉義:

\[[a-zA-Z0-9]{1, 12}\]