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

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

4

6 回答 6

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

转义报价。

irb(main):012:0* <<'eos'.chomp
irb(main):013:0' [^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
irb(main):014:0' eos
=> "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\\\]^_`~]"
于 2013-06-15T19:36:43.657 回答
1

下面也可以

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

或者

s = %q<[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]>
s # => "[^\\s!\"\#$%&'()*+,\\-./:;<=>?\\[\\\\]^_`~]"
于 2013-06-15T19:47:04.737 回答
1

您可以使用“HEREDOC”

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

Ruby 2.0,正常工作。

于 2013-06-15T19:39:52.673 回答
1

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

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

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

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

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

您不使用大括号,因此%q{}只需要转义有意义的反斜杠:

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

Ruby 可以正确处理与%Qand的嵌套%q,因此即使您使用了<and ,这也同样有效>,因为它们恰好可以方便地平衡使用:

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

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

puts File.read('strange.txt').chomp
[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]
于 2013-06-15T20:26:25.493 回答
0

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
#=> " !\"\#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"

Explanation:

  • (32.chr..126.chr) creates the entire character range
  • grep(/[^0-9a-zA-Z]/) removes the "non-symbol" characters 0-9, a-z and A-Z
  • join joins the remaining characters
于 2013-06-15T20:36:31.480 回答
0

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

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

于 2013-06-15T19:36:41.203 回答