ruby - Gsub 第一次失败,下一次有效吗?

标签 ruby gsub

随着 gsub 的以下使用,我希望 “No,but I heard it's short and soft.” 放在 block 引号之间。第一次,它是空的。当我立即再次运行它时,它运行正常。

clean_content = "[quote="PDrizzle":1g581fap]No, but I heard it's short and soft.[/quote:1g581fap]\r\n\r\nwith very few ascents\r\n\r\nheh"
clean_content.gsub(
  /\[quote(?:.*)\](.*?)\[\/quote(?:.*)\]/,
  "<blockquote>#{$1}</blockquote>"
)
# => "<blockquote></blockquote>\r\n\r\nwith very few ascents\r\n\r\nheh" 
clean_content.gsub(
  /\[quote(?:.*)\](.*?)\[\/quote(?:.*)\]/,
  "<blockquote>#{$1}</blockquote>"
)
# => "<blockquote>No, but I heard it's short and soft.</blockquote>\r\n\r\nwith very few ascents\r\n\r\nheh"

有什么想法吗?

最佳答案

gsub 期望替换字符串中的反向引用被格式化为 \\1 而不是 $1。在您的示例中,第一次发生的字符串替换是指一个空字符串变量,第二次是通过执行第一个模式匹配设置的。

所以你想要:

clean_content.gsub(/\[quote(?:.*)\](.*?)\[\/quote(?:.*)\]/, "<blockquote>\\1</blockquote>")

关于ruby - Gsub 第一次失败,下一次有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12593745/

相关文章:

ruby - 如何理解 gsub(/^.*\//, '' ) 或正则表达式

ruby-on-rails - 在 rails 模型中覆盖 to_s ...可能吗?

ruby - 导轨 : control ordering of query parameters in url_for?

ruby-on-rails - 我的 Ruby on Rails 应用程序中的内存泄漏

ruby - 用 gsub 替换为大写字符

replace - Lua 的 string.gsub 模式规则是什么?

通过匹配另一个数据框来替换单词

mysql - Ruby Shoes 和 MySQL : GUI freezes, 我应该使用线程吗?

ruby - 为什么文字字符串应该以 Frozen 开头? ( ruby 2.1)

替换字符串中的下标数字