152 votes

L'expression Ruby% r {}

Dans un modèle il y a un champ

 validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i
 

Cela me semble assez étrange. Je suis conscient que c'est une expression régulière. Mais je voudrais:

  • savoir ce que cela signifie exactement. Est-ce que %r{value} égal à /value/ ?
  • être capable de le remplacer par l'opérateur normal Ruby regex /some regex/ ou ~= . C'est possible?

292voto

Eureka Points 1647

%r{} est équivalent à la notation /.../ , mais vous permet d'avoir '/' dans votre expression rationnelle sans avoir à les échapper:

 %r{/home/user}
 

est équivalent à:

 /\\/home\\/user/
 

Ce n'est qu'un produit de base pour la lisibilité.

Modifier:

Notez que vous pouvez utiliser presque toutes les paires de caractères non alphabétiques au lieu de '{}'. Ces variantes fonctionnent aussi bien:

 %r!/home/user!
%r'/home/user'
%r(/home/user)
 

11voto

xdazz Points 85907

Avec %r , vous pouvez utiliser n’importe quel délimiteur.

Vous pouvez utiliser %r{} ou %r[] ou %r!! etc.

L'avantage d'utiliser d'autres délimètres est que vous n'avez pas besoin d'échapper au / utilisé dans le littéral des expressions rationnelles normales.

9voto

Samy Dindane Points 6874

\. => contient un point
(gif|jpg|jpeg|png) => alors, l'une ou l'autre de ces extensions
$ => la fin, rien après
i => insensible à la casse

Et cela revient à écrire /\.(gif|jpg|jpeg|png)$/i .

3voto

Erez Rabih Points 9166

cette expression rationnelle correspond à toutes les chaînes se terminant par .gif, .jpg ...

vous pouvez le remplacer par

 /\.(gif|jpg|jpeg|png)$/i
 

1voto

hauleth Points 8253

Cela signifie que image_file_name doit se terminer ( $ ) par un point et un des symboles gif, jpg, jpeg ou png.

Oui %r{} signifie exactement la même chose que // mais en %r{} vous n'avez pas besoin d'échapper à / .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X