Ruby%r {}expression式
在模型中有一个领域
validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i 这对我来说很奇怪。 我知道这是一个正则expression式。 但是我想:
-  知道究竟是什么意思。  %r{value}等于/value/?
-  能够用普通的Ruby正则expression式运算符/some regex/或~=replace它。 可能吗?
  %r{}相当于/.../表示法,但是可以在你的正则expression式中使用'/'而不必转义它们: 
 %r{/home/user} 
相当于:
 /\/home\/user/ 
这只是一个语法商品,易于理解。
编辑:
请注意,您几乎可以使用任何非字母字符对,而不是“{}”。 这些变体同样适用:
 %r!/home/user! %r'/home/user' %r(/home/user) 
 \.  =>包含一个点 
  (gif|jpg|jpeg|png) =>然后,这些扩展名中的任何一个 
  $ =>结束,没有任何事情 
  i =>不区分大小写 
 和写作/\.(gif|jpg|jpeg|png)$/i 。 
 用%r ,你可以使用任何分隔符。 
 您可以使用%r{}或%r[]或%r!! 等等 
 使用其他的delimeters的好处是,你不需要逃避/使用正常的正则expression式文字。 
这个正则expression式匹配以.gif,.jpg结尾的所有string…
你可以用它来replace它
 /\.(gif|jpg|jpeg|png)$/i 
 这意味着image_file_name必须以点(gif,jpg,jpeg或png)结尾( $ )。 
 是%r{}含义与//完全相同,但在%r{}您不需要转义/ 。