Ruby Regex匹配多次

时间:2014-02-27 11:11:38

标签: ruby regex

我想在给定的单词中找到搜索词。所以我们说的是Regex 字母的顺序很重要,但我希望允许每个搜索字母的字母之间的字母。

示例:德语单词 seitenschneider 至少包含两种方式 seide

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

我想用尽可能少的字母找到结果,所以在这种情况下我会选择匹配2 有没有办法用正则表达式做到这一点?

我尝试不合理地制作通配符,但没有收到预期的结果:

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

我想要实现的目标是:

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

我也很喜欢像

这样的东西
"seitenschneider".scan(another_magic_regex_thingy)
=> ["seitenschneide", "schneide"]

因为我可以在那里找到最短的单词。

有关如何到达那里的任何提示?

1 个答案:

答案 0 :(得分:4)

关于你的第二个问题:

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

使用上面的正则表达式获得最短的一个:

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