如何在String#gsub的替换值中使用匹配内容并插入换行符
Ruby中gsub同时使用分组引用和换行符的解决方法
在使用String#gsub时,用双引号作为替换值可以直接插入换行符:
"my string".gsub(/\s/, "\n") # => "my\nstring"
但如果要在替换值里用正则匹配的分组内容,直接用单引号的话,没法正确解析换行符——你尝试的多种转义写法都失效,是因为单引号字符串不会解析\n这类转义序列,只会把它们当成字面字符。
这里有两种可行的解决方式:
1. 双引号配合转义的分组引用
在双引号里,分组引用需要用\\1(转义反斜杠),同时直接用\n表示换行:
"my string".gsub!(/(my )/, "\\1\n") # => "my\nstring"
2. 使用块形式的gsub
用块来处理替换逻辑时,可以直接在块内的字符串里使用$1(匹配的分组内容)和\n换行符,写法更直观:
"my string".gsub!(/(my )/) { "#{$1}\n" } # => "my\nstring"
内容的提问来源于stack exchange,提问作者fguillen
相关产品推荐
相关产品推荐

