Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby正则表达式多次匹配_Ruby_Regex - Fatal编程技术网

Ruby正则表达式多次匹配

Ruby正则表达式多次匹配,ruby,regex,Ruby,Regex,我想在给定的单词中查找搜索词。所以我们说的是正则表达式。 字母的顺序很重要,但我希望允许每个搜索词字母之间有字母 一个例子:德语单词seitenschneider包含单词seide,至少有两种方式: word: seitenschneider match 1: xxx.........xx. match 2: ......x...xxxx. 我想用尽可能少的字母找到结果,所以在本例中,我选择匹配2。 有没有办法用正则表达式实现这一点 我尝试取消通配符的reedy,但没有收到预期的结果:

我想在给定的单词中查找搜索词。所以我们说的是正则表达式。
字母的顺序很重要,但我希望允许每个搜索词字母之间有字母

一个例子:德语单词seitenschneider包含单词seide,至少有两种方式:

word:    seitenschneider
match 1: xxx.........xx.
match 2: ......x...xxxx.
我想用尽可能少的字母找到结果,所以在本例中,我选择匹配2。
有没有办法用正则表达式实现这一点

我尝试取消通配符的reedy,但没有收到预期的结果:

"seitenschneider".scan(/s.*?e.*?i.*?d.*?e/)
=> ["seitenschneide"]
我想要实现的是:

"seitenschneider".scan(magic_regex_thingy)
=> ["schneide"]
我也会很高兴有这样的事情

"seitenschneider".scan(another_magic_regex_thingy)
=> ["seitenschneide", "schneide"]
因为我可以自己找到最短的单词


关于如何到达那里有什么提示吗?

关于第二个问题:

"seitenschneider".scan(/(?=(s.*?e.*?i.*?d.*?e))/).flatten
# => ["seitenschneide", "schneide"]
使用上面的正则表达式获取最短的一个:

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

关于第二个问题:

"seitenschneider".scan(/(?=(s.*?e.*?i.*?d.*?e))/).flatten
# => ["seitenschneide", "schneide"]
使用上面的正则表达式获取最短的一个:

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