2011-04-04 6 views
0

[nom d'utilisateur] où le nom d'utilisateur est une chaîne contenant uniquement les caractères alphanumériques entre 1 et 12 caractèresMotif Regex - Alphanumeric

Mon code:

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); 
} 

me donne un match vide

+1

Regardez votre langue. Comment ça n'a pas fonctionné? –

+0

Pourquoi deux ensembles de crochets? – Toby

Répondre

4

Cela vous obtient un nom entre crochets (le match does't contiennent le symbole carrés entre parenthèses) :

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

Vous pouvez l'utiliser comme:

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

Fonctionne parfaitement, merci! – Contra

1

Vous avez trop de supports.

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

Je dois garder les crochets aussi – Contra

+2

S'il vous plaît clarifier. –

2

Vous avez trop de parenthèses, et vous voudrez peut-être correspondre au début (^) et à la fin ($) de la chaîne.

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

Si vous attendez entre crochets dans la chaîne vous correspondant, puis les échapper avec une barre oblique inverse.

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

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

Si vous essayez de faire correspondre les parenthèses, ils doivent être correctement échappé:

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