2014-02-27 96 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"