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