首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby %r{ }表达式

Ruby %r{ }表达式
EN

Stack Overflow用户
提问于 2012-09-12 17:06:27
回答 5查看 57.6K关注 0票数 145

在模型中有一个字段

代码语言:javascript
复制
validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i

对我来说这看起来很奇怪。我知道这是一个正则表达式。但我想:

  • 来知道它到底是什么意思。%r{value}等于/value/吗?
  • 可以用普通的Ruby正则表达式运算符/some regex/~=替换它。有可能吗?
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-12 17:10:22

%r{}等同于/.../表示法,但允许您在regexp中使用'/‘,而不必对它们进行转义:

代码语言:javascript
复制
%r{/home/user}

等同于:

代码语言:javascript
复制
/\/home\/user/

这只是一个语法商品,为了易读性。

编辑:

请注意,您可以使用几乎任何非字母字符对来代替'{}‘。这些变体工作得也很好:

代码语言:javascript
复制
%r!/home/user!
%r'/home/user'
%r(/home/user)

编辑2:

请注意,%r{}x变体忽略了空格,从而使复杂的regexp更具可读性。来自GitHub's Ruby style guide的示例

代码语言:javascript
复制
regexp = %r{
  start         # some text
  \s            # white space char
  (group)       # first group
  (?:alt1|alt2) # some alternation
  end
}x
票数 283
EN

Stack Overflow用户

发布于 2012-09-12 17:15:17

对于%r,您可以使用任何分隔符。

您可以使用%r{}%r[]%r!!等。

使用其他分隔符的好处是,您不需要转义常规正则表达式文字中使用的/

票数 11
EN

Stack Overflow用户

发布于 2012-09-12 17:09:41

\. =>包含一个点

(gif|jpg|jpeg|png) =>,这两个扩展中的任何一个

$ =>结尾,后面什么也没有

i =>不区分大小写

这和编写/\.(gif|jpg|jpeg|png)$/i是一样的。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12384704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档