[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
我不能使用双引号,我不能使用%q<symbol>string<symbol>
,因为它包含所有可能的符号(至少它应该)。
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
我不能使用双引号,我不能使用%q<symbol>string<symbol>
,因为它包含所有可能的符号(至少它应该)。
irb(main):001:0> '[^\s!"#$%&\'()*+,\-./:;<=>?\[\\\\\\]^_`~]'
=> "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\\\]^_`~]"
转义报价。
irb(main):012:0* <<'eos'.chomp
irb(main):013:0' [^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
irb(main):014:0' eos
=> "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\\\]^_`~]"
下面也可以
%q{[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]}
#=> "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\]^_`~]"
或者
s = %q<[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]>
s # => "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\]^_`~]"
您可以使用“HEREDOC”
my_string = <<-eos.gsub(/\s+/,'')
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
eos
Ruby 2.0,正常工作。
首先,您可以使用双引号 or %Q
,它比单引号 or 需要更多的工作%q
。
我会使用单引号,因为您只需要转义单引号 ( '
) 和有意义的反斜杠 ( \
):
puts '[^\s!"#$%&\'()*+,\-./:;<=>?\[\\\\\]^_`~]'
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
使用双引号,您需要转义双引号 ( "
)、磅/哈希 ( #
)、百分号 ( %
) 和所有反斜杠,而不仅仅是有意义的反斜杠:
puts "[^\\s!\"\#$\%&'()*+,\\-./:;<=>?\\[\\\\\\]^_`~]"
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
您不使用大括号,因此%q{}
只需要转义有意义的反斜杠:
puts %q{[^\s!"#$%&'()*+,\-./:;<=>?\[\\\\\]^_`~]}
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
Ruby 可以正确处理与%Q
and的嵌套%q
,因此即使您使用了<
and ,这也同样有效>
,因为它们恰好可以方便地平衡使用:
puts %q<[^\s!"#$%&'()*+,\-./:;<=>?\[\\\\\]^_`~]>
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
最后,如果您不想处理转义任何字符,您总是可以将奇怪的字符串按原样粘贴到文件中并读取它:
puts File.read('strange.txt').chomp
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
it contains all possible symbols (at least it should)
So you need a string containing all symbols?
The ASCII printable characters are within the character range 32..126. I'd use this range to create the string:
(32.chr..126.chr).grep(/[^0-9a-zA-Z]/).join
#=> " !\"\#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
(32.chr..126.chr)
creates the entire character rangegrep(/[^0-9a-zA-Z]/)
removes the "non-symbol" characters 0-9
, a-z
and A-Z
join
joins the remaining characters
x = '[^\s!"#$%&\'()*+,\-./:;<=>?\[\\\]^_`~]'
但是您确定不想定义正则表达式吗?