2009-07-30 9 views
1

Je voudrais faire correspondre n'importe quelle séquence ou chiffres, ou le littéral: na. J'utilise:Expression régulière - quelle est mon erreur?

"^\d*|na$" 

Les chiffres sont jumelés, mais pas na.

Quelle est mon erreur?

Plus d'infos: je l'utilise dans un validateur d'expressions régulières pour une zone de texte dans aspnet C#.

Une entrée vide est ok.

+1

Serait bien si vous postez chaîne que vous essayez de faire correspondre – zakovyrya

Répondre

9

Il est parce que l'expression est en cours de lecture (en supposant PCRE):

"^\d*" OR "na$" 

Quelques parenthèses prendraient en charge que dans un instant. Choisissez parmi (en fonction de vos besoins):

"^(\d+|na)$" // this will capture the number or na 
"^(?:\d+|na)$" // this one won't capture 

Cheers!

+0

Merci. Cela a fonctionné. –

1

Peut-être ^(?:\d*|na)$ serait mieux. Quelle langue/moteur? Aussi, veuillez montrer l'entrée et, si possible, l'extrait du code.

De même, il est possible que vous ne correspondiez pas à "na" car il y a une nouvelle ligne après. Les chiffres ne seront pas affectés car vous n'avez pas spécifié d'ancre $ pour eux. Donc, selon la langue et la façon dont l'entrée est acquise, il peut y avoir une nouvelle ligne entre "na" et la fin de la chaîne, et $ ne correspondra pas à moins que vous allumiez la correspondance multi-ligne (ou dépouillez la chaîne de la nouvelle ligne).

-2

Cela peut ne pas être la meilleure ou façon la plus élégante de le réparer, mais essayez ceci:

"^\d*|[n][a]$" 
6

L'opérateur | ont une priorité plus élevée que les ancres ^ et $. Ainsi, l'expression ^\d*|na$ signifie correspondre ^\d* ou na$. Donc, essayez ceci:

^(\d*|na)$ 

Ou:

^\d*$|^na$