随着 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/