2011-07-07 5 views
2

J'ai cette regex. Il est supposé correspondre à tous les personnages, mais aussi à tous les personnages avec un espace.Regex ne fonctionne pas correctement

Par exemple:

wwwwwwww - MATCH 
www wwwwww - MATCH 
@@@@@ - MATCH 
wwwwqq - NOT MATCH 
wwww qqqq - NOT MATCH 

Mais il ne correspond pas à des choses comme:

@@@@@@@ 
....... 

Quel est le problème avec elle? Ici, il est ci-dessous:

var match = Regex.Match(message, @"^\s*(\w)(?:\1|\s)*$"); 

Répondre

3

Parce que @ et . ne sont pas "caractères de mot". Ne pourriez-vous pas faire correspondre avec (.)?

var match = Regex.Match(message, @"^\s*(.)(?:\1|\s)*$"); 

Vous pouvez également essayer avec \S (caractère non espace blanc).

+1

Comment est-ce que je pourrais faire correspondre pas seulement des caractères de mot, mais n'importe quels caractères? – slandau

+0

Avec '.' ou' \ S'. Voir dans ma réponse. – Vache

+0

Oh d'accord, je l'ai eu. Oh, je ne le savais pas. Je vous remercie! – slandau

1

\w est un raccourci pour un « caractère de mot, » qui ne comprend pas la ponctuation comme @ ou ..

Dot (.) signifie n'importe quel caractère; \S signifie non-espace.