gpt4 book ai didi

ruby - ruby 中的多行正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:14 25 4
gpt4 key购买 nike

我想从文件中提取两个关键字 (<<-DOC, DOC) 之间的所有文本。比如我的文件内容如下

abc.rb

def abc
<<-DOC abc:
return "hahaha"
DOC
puts "hahaha"
end

def efg
<<-DOC efg:
return "hehehe"
DOC
puts "hehehe"
end

我想得到两场比赛:

<<-DOC abc:
return "hahaha"
DOC

<<-DOC efg:
return "hehehe"
DOC

我试过了 File.read("abc.rb").match(/<<-DOC(.*?)DOC/m)但它给出了第一次出现 <<-DOC 之间的所有文本(在 abc 内)和最后一次出现 DOC (在 efg 内)

最佳答案

据我所知,您的正则表达式是正确的,并且 (.*?) 应该是非贪婪匹配。我认为您遇到的问题是 Ruby 中的 match 仅返回正则表达式的第一个匹配项。例如

File.read("abc.rb").match(/<<-DOC(.*?)DOC/m)
=> #<MatchData "<<-DOC abc:\n return \"hahaha\"\n DOC" 1:" abc:\n return \"hahaha\"\n ">

你真正想用的是scan

File.read("abc.rb").scan(/<<-DOC(.*?)DOC/m)
=> [[" abc:\n return \"hahaha\"\n "], [" efg:\n return \"hehehe\"\n "]]

这将返回一个数组数组,每个数组包含从正则表达式中捕获的组。参见 https://ruby-doc.org/core-2.2.0/String.html#method-i-scan

关于ruby - ruby 中的多行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50086014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com