sub和regex的一些帮助

时间:2011-10-01 08:26:15

标签: regex ruby-on-rails-3

这有效:

'http://foobar.com/default_profile_images/default_profile_6_normal.png'.sub(/normal\.([a-z]+)$/, 'reasonably_small.\1') 

这不是:

"http://foobar.com/profile_images/1550660558/Bathurze_Pics_normal.JPG".sub(/normal\.([a-z]+)$/, 'reasonably_small.\1')

我正在尝试用normal替换reasonably small。任何人都知道它为什么不起作用?

4 个答案:

答案 0 :(得分:3)

这是一个区分大小写的问题。 JPG与[a-z]不匹配。如果您将正则表达式更改为不区分大小写,则应该可以正常工作。

更改/normal\.([a-z]+)$//normal\.([a-z]+)$/i(添加i修饰符)

答案 1 :(得分:0)

第二个示例在结尾处有大写字母,因此您应该从

更改正则表达式

/normal\.([a-z]+)$/

/normal\.([a-zA-Z]+)$/

编辑:修复了第二个正则表达式中缺少的

答案 2 :(得分:0)

添加了案例处理 -

"http://foobar.com/profile_images/1550660558/Bathurze_Pics_normal.JPG".sub(/normal\.([a-z]+)$/, 'reasonably_small.\1')

应该工作。

答案 3 :(得分:0)

原因是/ [a-z] + /只捕获小写字母,换句话说它是区分大小写的。

由于第一个例子中的文件后缀是.png所以,正则表达式匹配,而第二个没有。

解决方案可以简单地将其从[a-z] +更改为[A-Za-z +]。