尝试在ruby中使用正则表达式来查找特定字符

时间:2012-05-02 21:09:15

标签: ruby-on-rails ruby regex ruby-on-rails-3.1

我试图在rails应用程序的ruby中使用正则表达式来搜索给定的字符串并找到打开和关闭方括号的任何实例(即[和])并选择两者之间的内容。

例如:

Lorem ipsum [dolor sit] amet...

在此字符串中,结果为:[dolor sit]

我玩了一些rubular,发现这或多或少做了我想要的事情

/\[.*?\]/

所以我的问题是,如何在不选择括号本身的情况下匹配两个方括号内的所有内容?还有我如何将它们实际集成到ruby脚本中呢?

正则表达式对我来说是一个全新的基础,所以你们提供的任何帮助都会非常感激:)

3 个答案:

答案 0 :(得分:4)

收集正则表达式的多个捕获是String#scan

的作业
>> s="Lorem ipsum [dolor sit] [amet] ..."
=> "Lorem ipsum [dolor sit] [amet] ..."
>> s.scan(/\[([^\]]*)\]/).flatten
=> ["dolor sit", "amet"]

答案 1 :(得分:2)

您需要使用String#scan

"Hi [there] how are [you]?".scan(/\[.*?\]/)
 => ["[there]", "[you]"] 

此方法迭代整个字符串,返回每个匹配。

答案 2 :(得分:1)

您可以在()内包装与要提取的输入部分对应的正则表达式部分:

str = "Lorem ipsum [dolor sit] amet....".match(/\[(.*?)\]/)
# str --> #<MatchData "[dolor sit]" 1:"dolor sit"> 
str[1] # Will give you 'dolor sit'

请注意,您还可以通过全局变量访问匹配结果:$1(通常为$i,其中i表示匹配单词的索引。)