2011-04-04 98 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}\]