2016-03-03 58 views
1

文件escape.txt包含"/\\/"(斜杠,反斜杠,反斜杠,斜杠)。文件test_gsub.rb有:转义字符红宝石`gsub`

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

此代码将输出"/\\/"(斜线,反斜线,斜线),即,oneback斜杠逃脱。

我想知道是否有一种方法来禁用此转义功能。我想输出(斜杠,反斜杠,反斜杠,斜杠)。

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

此功能非常重要,因为我需要处理原始文本,并且gsub将始终转义这些转义字符。

+0

'File.open(ARGV [0])read'哈希 - >'File.read(ARGV [0])'或甚至可能是'ARGF.read'。 – cremno

回答

0
content.gsub! content, content => content 

docs for gsub你可以找到这个

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

如果第二个参数是散列,并且匹配的文本是其中一个 键,则相应的值是替换字符串。

使用散列而不是字符串可防止\被专门处理。

虽然gsub!的文档不提它似乎很好地工作(也许这是一个疏忽)

+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/ review/low-quality-posts/11485376) – CinCout

+0

@HappyCoder,这不是一个批评或澄清。它简洁地展示了如何逃避内容以得到要求的结果。你对这个问题有不同的理解吗? –

+0

答案被标记为低质量!只解释上面的代码行是什么会符合每个人的利益。 – CinCout