[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
我不能使用双引号,我不能使用%q<symbol>string<symbol>
,因为它包含所有可能的符号(至少它应该)。
答案 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-9
,a-z
和A-Z
join
加入其余字符