如何将这些声明为字符串?

时间:2013-06-15 19:33:17

标签: ruby

[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]

我不能使用双引号,我不能使用%q<symbol>string<symbol>,因为它包含所有可能的符号(至少它应该)。

6 个答案:

答案 0 :(得分:2)

irb(main):001:0> '[^\s!"#$%&\'()*+,\-./:;<=>?\[\\\\\\]^_`~]'
=> "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\\\]^_`~]"

逃脱报价。

irb(main):012:0* <<'eos'.chomp
irb(main):013:0' [^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
irb(main):014:0' eos
=> "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\\\]^_`~]"

答案 1 :(得分:1)

您可以使用“HEREDOC”

my_string = <<-eos.gsub(/\s+/,'')
   [^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
eos

Ruby 2.0,正常工作。

答案 2 :(得分:1)

以下也可以

%q{[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]}
#=> "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\]^_`~]"

s = %q<[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]>
s # => "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\]^_`~]"

答案 3 :(得分:1)

首先,您可以使用双引号或%Q,它只需要比单引号或%q更多的工作。

我会使用单引号,因为您只需要转义单引号(')和有意义的反斜杠(\):

puts '[^\s!"#$%&\'()*+,\-./:;<=>?\[\\\\\]^_`~]'
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]

使用双引号,您需要转义双引号("),磅/哈希(#),百分比(%)和所有反斜杠,而不仅仅是有意义的的:

puts "[^\\s!\"\#$\%&'()*+,\\-./:;<=>?\\[\\\\\\]^_`~]"
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]

你不使用花括号,所以%q{}只需要有意义的反斜杠来转义:

puts %q{[^\s!"#$%&'()*+,\-./:;<=>?\[\\\\\]^_`~]}
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]

Ruby使用%Q%q正确处理嵌套,因此即使您使用<>也可以正常工作,因为它们恰好使用得很方便平衡:

puts %q<[^\s!"#$%&'()*+,\-./:;<=>?\[\\\\\]^_`~]>
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]

最后,如果您不想处理转义任何字符,您可以随时将奇怪的字符串原样粘贴到文件中并阅读它:

puts File.read('strange.txt').chomp
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]

答案 4 :(得分:0)

x = '[^\s!"#$%&\'()*+,\-./:;<=>?\[\\\]^_`~]'

但你确定你不想定义正则表达式吗?

答案 5 :(得分:0)

  

它包含所有可能的符号(至少它应该)

所以你需要一个包含所有符号的字符串吗?

ASCII printable characters在32..126的字符范围内。我将使用此范围来创建字符串:

(32.chr..126.chr).grep(/[^0-9a-zA-Z]/).join
#=> " !\"\#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"

说明:

  • (32.chr..126.chr)创建整个字符范围
  • grep(/[^0-9a-zA-Z]/)删除“非符号”字符0-9a-zA-Z
  • join加入其余字符