Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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,我正在尝试匹配块中的所有文本: group :development do gem 'test' end 在上面的上下文中,我想返回“gem'test'”。 我使用的是: /(?<=group :development do)(.*)(?=end)/m /(?我不太清楚原因,但是将*更改为*?可以匹配 红细胞: 它似乎也应该与*很好地匹配,但出于某种原因,它似乎没有回溯 以下是使用*时的问题: 请注意,不管这种行为的原因是什么,您都应该使用*?,否则您只能从第一个块的开头到最后一个

我正在尝试匹配块中的所有文本:

group :development do
  gem 'test'
end
在上面的上下文中,我想返回
“gem'test'”
。 我使用的是:

/(?<=group :development do)(.*)(?=end)/m

/(?我不太清楚原因,但是将
*
更改为
*?
可以匹配

红细胞:

它似乎也应该与
*
很好地匹配,但出于某种原因,它似乎没有回溯

以下是使用
*
时的问题:


请注意,不管这种行为的原因是什么,您都应该使用
*?
,否则您只能从第一个块的开头到最后一个块的结尾找到一个匹配项(如果字符串中有多个块).

我不太清楚原因,但是将
*
更改为
*?
允许匹配

红细胞:

它似乎也应该与
*
很好地匹配,但出于某种原因,它似乎没有回溯

以下是使用
*
时的问题:


请注意,不管这种行为的原因是什么,您都应该使用
*?
,否则您只能从第一个块的开头到最后一个块的结尾找到一个匹配项(如果字符串中有多个块)。

这看起来像是重复的,请参见此处:它以什么方式不工作?(未找到匹配项)这看起来像是重复的,请参见此处:它以何种方式不起作用?(未找到匹配项)
*
搜索可能最长的匹配项。
*?
搜索可能最短的匹配项,并且在大多数情况下更可取。这是因为
*
是一种“贪婪匹配”,它尽可能匹配,在本例中也会吃掉
结尾
,而
*?
是一个非贪婪的匹配,只会吃掉足够让剩余的正则表达式匹配。对于上面的注释,
*
在本例中也应该匹配。请参阅。即使
*
会吃掉
结尾
,但正则表达式引擎应该回溯,直到匹配成功。我刚刚尝试用
/(?@TimPietzcker让我随时更新!我真的很好奇这种行为。
*
搜索可能最长的匹配。
*?
搜索可能最短的匹配,在大多数情况下更可取。因为
*
是一种“贪婪匹配”,它尽可能匹配,在本例中也会吃掉
结尾
,而
*?
是一个非贪婪的匹配,只会吃掉足够让剩余的正则表达式匹配。对于上面的注释,
*
在本例中也应该匹配。请参阅。即使
*
会吃掉
结尾
,但正则表达式引擎应该回溯,直到匹配成功。我刚刚尝试用
/(?@TimPietzcker让我保持更新!我真的很好奇这种行为。