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让我保持更新!我真的很好奇这种行为。