2010-08-19 6 views
3

NET Regex. (Avec ignorer cas)Pourquoi le symbole de point ne fonctionne-t-il pas dans ce Regex?

Je veux qu'il corresponde

field_x_12 
field_a_ABC 
field_r_something 

etc

Ma question est pourquoi l'opérateur . ne fonctionne pas dans ce regex:

field_[.]_.* 

encore ce (équivalent fondamentalement) regex fonctionne:

field_[a-z]_.* 

Y a-t-il quelque chose qui me manque à propos de l'opérateur de point .?

+1

Aussi, "." et "[a-z]" ne sont pas à peu près équivalents. Le caractère générique de point représente * n'importe quel caractère *, pas seulement les caractères alpha (le point correspond aux caractères alpha, chiffres, caractères spéciaux, caractères non imprimables, etc.) Ce que vous voulez vraiment, c'est "field_ \ w _ (?: \ W | \ d) * " – Toby

+0

@Toby oui je sais, mais il n'y aura jamais rien d'autre que des caractères alpha entre _ _ _ dans ce cas – Earlz

Répondre

6

Un . à l'intérieur d'une classe de caractères ([...]) est un caractère de point littéral. Si vous voulez qu'il agisse comme un joker, n'utilisez pas les crochets.

+0

donc ce que vous voulez vraiment c'est le champ _._. * (En supposant que vous voulez un seul caractère de match au lieu de seulement az) –

1

Pourquoi utilisez-vous [.]? Le [] indique un ensemble explicite de caractères, donc le caractère . est ce que le RegEx recherche.

field_._.* 

Cela devrait fonctionner correctement. Voir this.

0

Les parenthèses intérieures . est un point littéral qui ne correspond à aucun caractère.

0

Vous devriez essayer field_._.* car dans le [] il est traité comme un point acutal.

0

Lorsqu'il se trouve dans une classe de caractères, le point est simplement une période et non un caractère générique.