2014-02-27 153 views
1

我想在給定單詞中查找搜索詞。所以我們說的是正則表達式。
這些字母的順序很重要,但我希望允許每個搜索項的字母之間的字母。Ruby正則表達式匹配多次

一個例子:德語單詞seitenschneider包含至少兩個方面的話seide

word: seitenschneider 
match 1: xxx.........xx. 
match 2: ......x...xxxx. 

我想找到儘可能少的文字結果,所以在這種情況下,我會去匹配2.
有沒有辦法用正則表達式來做到這一點?

我試圖使通配符ungreedy但沒有得到期望的結果:

"seitenschneider".scan(/s.*?e.*?i.*?d.*?e/) 
=> ["seitenschneide"] 

我想實現的是:

"seitenschneider".scan(magic_regex_thingy) 
=> ["schneide"] 

我也很高興與像

"seitenschneider".scan(another_magic_regex_thingy) 
=> ["seitenschneide", "schneide"] 

因爲我可以自己找到那裏最短的單詞。

有關如何到達那裏的任何提示?

回答

4

關於第二個問題:

"seitenschneider".scan(/(?=(s.*?e.*?i.*?d.*?e))/).flatten 
# => ["seitenschneide", "schneide"] 

獲取使用上述正則表達式中最短者:

"seitenschneider".scan(/(?=(s.*?e.*?i.*?d.*?e))/).flatten.min_by(&:length) 
# => "schneide"