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{}您不需要转义/ 。