正则表达式单独替换每个数字而不是整个数字

时间:2016-03-13 11:45:29

标签: ruby regex

我有这个网址,我想用以下内容替换id:

/api/users/123456/count_pending_messages

如果我这样做,它将替换每个数字的ID:

url.gsub(/[\d]/, 'ID')

Ruby有这个o标志。所以很自然地我试着像这样添加它:

url.gsub(/[\d]/o, 'ID')

但它仍然替换每个数字,而我想替换整个数字(即123456)。我在这里缺少什么?

3 个答案:

答案 0 :(得分:5)

如果您要替换123456,则应尝试/\d+/

+ 是表示一个或多个数字的量词。

您正在做的是逐个匹配每个数字 。所以ID被替换六次。

您需要使用number匹配整个/\d+/

答案 1 :(得分:3)

您应该使用sub方法,并且应该更改正则表达式。

match = /
   (?<=\/users\/)  
   \d+              
/x

url.sub match, 'ID'

答案 2 :(得分:0)

为了将123456(这是一种资源)替换为ID,您必须使用

url.gsub(/\/\d+\//, '/ID/')

它只会将那些作为资源一部分的数字替换为ID。