在模型中有一个字段
validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i
对我来说这看起来很奇怪。我知道这是一个正则表达式。但我想:
%r{value}
等于/value/
吗?/some regex/
或~=
替换它。有可能吗?发布于 2012-09-12 17:10:22
%r{}
等同于/.../
表示法,但允许您在regexp中使用'/‘,而不必对它们进行转义:
%r{/home/user}
等同于:
/\/home\/user/
这只是一个语法商品,为了易读性。
编辑:
请注意,您可以使用几乎任何非字母字符对来代替'{}‘。这些变体工作得也很好:
%r!/home/user!
%r'/home/user'
%r(/home/user)
编辑2:
请注意,%r{}x
变体忽略了空格,从而使复杂的regexp更具可读性。来自GitHub's Ruby style guide的示例
regexp = %r{
start # some text
\s # white space char
(group) # first group
(?:alt1|alt2) # some alternation
end
}x
发布于 2012-09-12 17:15:17
对于%r
,您可以使用任何分隔符。
您可以使用%r{}
、%r[]
或%r!!
等。
使用其他分隔符的好处是,您不需要转义常规正则表达式文字中使用的/
。
发布于 2012-09-12 17:09:41
\.
=>包含一个点
(gif|jpg|jpeg|png)
=>,这两个扩展中的任何一个
$
=>结尾,后面什么也没有
i
=>不区分大小写
这和编写/\.(gif|jpg|jpeg|png)$/i
是一样的。
https://stackoverflow.com/questions/12384704
复制相似问题