2011-08-07 5 views
1

Je cours Ruby 1.9.2p290 et Rails 3.1.0.rc5. Quand je lance cette regex, elle correspond à tout:Ruby Regex ne correspondent pas

Ai-je raté quelque chose?

+0

'/ [. Flv | .gif] /' signifie « un caractère de' .', 'f',' l', 'v',' '', 'g' ou' i' ". –

Répondre

5

Pour vous assurer que seule l'extension exacte est adaptée, utilisez

File.delete(f) unless File.extname(f) =~ /^\.(?:flv|gif)$/ 

Explication:

^  # Start of string 
\. # Match . 
(?: # Match the following: Either... 
flv # flv 
|  # or 
gif # gif 
)  # End of alternation 
$  # End of string 
+0

Exactement! Merci beaucoup. – Morten

3

Je pense que vous voulez correspondre à l'extension ".flv" ou ".gif". Par conséquent, vous pouvez utiliser l'expression rationnelle suivante:

/^(\.flv|\.gif)$/ 

Votre regex définit un jeu de caractères correspondant ([...]) et cela donne vrai pour les extensions contenant l'un des caractères de f ', « g », « i », « l ',' v ',' | ','. '. Puisque n'importe quel fichier avec une extension a un point dans l'extension, ceci correspondra à n'importe quel fichier avec n'importe quelle extension.

Questions connexes