ruby-on-rails - 正则表达式 : How do I grab a block of text using regex?(在 ruby​​ 中)

标签 ruby-on-rails ruby regex

我正在使用 ruby​​,我正试图找到一种在 {start_grab_entries} 和 {end_grab_entries} 之间抓取文本的方法,如下所示:

{start_grab_entries}
i want to grab
the text that
you see here in
the middle
{end_grab_entries}

像这样:

$1 => "i want to grab
       the text that
       you see here in
       the middle"

到目前为止,我尝试将其作为正则表达式:

\{start_grab_entries}(.|\n)*\{end_grab_entries}

但是,使用 $1,这给了我一个空白。您知道我可以做些什么来正确抓取标签之间的文本 block 吗?

最佳答案

有一个更好的方法可以让点匹配换行符(/m修饰符):

regexp = /\{start_grab_entries\}(.*?)\{end_grab_entries\}/m

此外,通过附加 ? 使 * 变得惰性,否则如果您的输入中出现多个这样的部分,您可能会匹配太多。

就是说,您得到空白匹配的原因是您重复了捕获组本身;因此,您只捕获了最后一次重复(在本例中为 \n)。

如果您将捕获组放在重复的之外,它就会“起作用”:

\{start_grab_entries\}((?:.|\n)*)\{end_grab_entries\}`

但是,如上所述,有更好的方法来做到这一点。

关于ruby-on-rails - 正则表达式 : How do I grab a block of text using regex?(在 ruby​​ 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3855654/

相关文章:

ruby-on-rails - 使用 Sequel::Model.plugin 时间戳和触摸时出现 NoExistingObject 异常

javascript - 在 Rails 3.1 和 jQuery 中将数据从弹出窗口传递到打开表单

java - MVC 模式的原始想法

ruby-on-rails - 将 build_command 与 CruiseControl.rb 一起使用

java - 用于匹配 URL 部分的正则表达式

ruby-on-rails - 嵌套 has_many :through in rails 3

ruby - Zip::ZipFile:如何在不解压zip的情况下修改内部文本文件的内容?

ruby-on-rails - Rails 迁移生成器不生成列

java正则表达式读取属性,双括号有什么不同

仅从数字输入中排除 0 作为第一个符号的 HTML 模式