2012-05-02 41 views
3

我想在Rails應用程序中使用正則表達式來查找給定的字符串,並找到任何打開和關閉方括號的實例(即[和])並選擇兩者之間的內容。試圖在ruby中使用正則表達式來查找特定字符

例如:

Lorem ipsum [dolor sit] amet... 

在這個字符串的結果將是:[dolor sit]

我rubular有點玩了一圈,發現這或多或少我想要做什麼

/\[.*?\]/ 

所以我的問題是,我如何匹配兩個方括號內的所有內容而不選擇括號本身?而且我怎樣才能將它們整合到一個Ruby腳本中?

正則表達式是我全新的地面所以你們可以提供任何幫助,將不勝感激:)

+0

你真的想要匹配什麼?在這裏比賽應該是什麼'Lorem ipsum [do [lor [si] tmemet]' – sln

+0

由於你是新的正則表達式,'/\[(.*)\]/'完全符合你想要的樣本,但絕不會與'/\[(.*?)\]/'相同。 – sln

+0

@sln哦好吧,你能解釋一下有什麼不同嗎? – gregchapple

回答

4

收集正則表達式的多個捕獲是String#scan

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

這正是我想要的,謝謝! – gregchapple

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表示匹配字的索引)。

+0

當我嘗試匹配[]的多個實例時,它不起作用。我如何使它匹配所有實例? – gregchapple

+0

@gregchapple你的意思是:「Lorem ipsum [dolor sit] [amet] ...」?就像你想要提取的:'多爾坐'和'amet'? –

+0

耶!那可能嗎? – gregchapple

2

工作需要使用String#scan

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

這種方法遍歷整個字符串,返回每一場比賽。

相關問題