Ruby,使用正则表达式获取所有值

时间:2019-07-12 19:48:26

标签: regex ruby

我一直在尝试找出在Ruby中要使用哪个 regex ,以便获取{ }括号之间的所有值。

  • users/{id}/profile-我只需要返回{}之间的单词列表,这里我们只有一个匹配项id,因此结果应为{{1 }}

  • ['id']-在这里,我们应该返回users/{id}/profile/{name}的列表,因为它们位于括号之间。

2 个答案:

答案 0 :(得分:3)

def between_braces(str)
  str.scan(/\{(.*?)\}/).flatten
end

str1 = "users/{id}/profile"
str2 = "users/{id}/profile/{name}"

between_braces(str1)
  #=> ["id"] 
between_braces(str2)
  #=> ["id", "name"] 

或者,

def between_braces(str)
  str.scan(/(?<=\{).*?(?=\})/)
end

这里(?<=\{)正后视,这意味着匹配必须以左花括号开头,而(?=\})正后视,表示匹配之后必须有右括号。

在两种情况下,都必须通过添加问号使.*变得懒惰(又称​​非贪婪)。没有这些,我们将得到以下结果:

str2.scan(/(?<=\{).*(?=\})/)
  #=> ["id}/profile/{name"] 

我更喜欢第二个正则表达式,因为.flatten很丑。

答案 1 :(得分:1)

以下正则表达式将删除在{}之间找到的所有子字符串。

使用Ruby的scan方法,然后可以返回带有子字符串的数组

str = "users/{id}/profile/{hello}"
str.scan(/\{([^}]+)\}/).flatten

# return ['id', 'hello']