【问题标题】:Ruby `gsub` of escape character转义字符的Ruby`gsub`
【发布时间】:2016-06-16 04:25:03
【问题描述】:

文件escape.txt 包含"/\\/"(斜线、反斜线、反斜线、斜线)。文件test_gsub.rb 有:

content = File.open(ARGV[0]).read
content.gsub! content, content
puts content

这段代码会输出"/\\/"(斜线、反斜线、斜线),即单反斜线被转义。

我想知道是否有办法禁用此转义功能。我要输出(斜杠、反斜杠、反斜杠、斜杠)。

如果我删除gsub,它将输出(斜杠、反斜杠、反斜杠、斜杠)。

这个功能很重要,因为我需要处理原始文本,而gsub 总是会转义这些转义字符。

【问题讨论】:

  • File.open(ARGV[0]).read -> File.read(ARGV[0]) 甚至ARGF.read

标签: ruby regex escaping gsub


【解决方案1】:
content.gsub! content, content => content

docs for gsub你可以找到这个

如果替换是一个字符串,它将被替换为匹配的 文本。它可能包含对模式捕获组的反向引用 形式为 \d,其中 d 是组号,或 \k,其中 n 是 组的名字。如果它是双引号字符串,则两个反向引用都必须 前面有一个额外的反斜杠。但是,在更换范围内 特殊匹配变量,例如 $&,不会引用当前 匹配。

如果第二个参数是一个哈希,并且匹配的文本是它的一个 键,对应的值为替换字符串。

使用散列代替字符串可防止\ 被特殊对待。

虽然gsub! 的文档没有提及哈希,但它似乎工作正常(也许是疏忽)

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • @HappyCoder,这不是批评或澄清。它简洁地展示了如何转义内容以获得所要求的结果。你对这个问题的理解不同吗?
  • 答案被标记为低质量!解释一下上面这行代码的作用符合每个人的利益。
  • 感谢您的回答。我认为您正确理解了我的问题。然而,这种解决方案似乎产生了一些新问题。当我将/ \\/ 放入escape.txt 时,它会给我/\ \ \\/\n,它甚至会打印斜杠n。我只是想打印原始文本,而不是以任何方式更改。你知道如何做到这一点吗?
  • @ZEWEICHU,好的,我会努力解决这个问题。当我这样做的时候,你能在你的问题中添加更多的测试用例吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 2022-06-17
  • 2014-03-17
  • 1970-01-01
相关资源
最近更新 更多