我怎么能在 Ruby 字符类中说“除反斜杠之外的所有符号”?
/'[^\]*'/.match("'some string \ hello'") => should be nil
带有两个反斜杠的变体不起作用
/'[^\\]*'/.match("'some string \ hello'") => 'some string \ hello' BUT should be nil
您的问题不在于您的正则表达式;你说对了。您的问题是您的测试字符串中没有反斜杠。相反,它有一个逃逸空间。试试这个:
str = "'some string \\ hello'"
puts str #=> 'some string \ hello'
p /'[^\\]*'/.match(str) #=> nil
您需要转义反斜杠:
[^\\]*
因为反斜杠是正则表达式中的转义字符,因此在这里转义了右括号。
如果要验证整个字符串是否包含非反斜杠字符,则需要锚点:
^[^\\]*$
您的字符串中实际上没有要匹配的反斜杠。试着看看你的输入:
"'some string \ hello'".length # => 20
"a\ b".length # => 3
双引号中的“\”被转义为一个空格:
irb(main):014:0> " "[0].to_i # => 32
irb(main):015:0> "\ "[0].to_i # => 32
irb(main):016:0> "\ ".size #=> 1
如果你想不匹配斜线,你需要两个,就像在你的第二个例子中一样,这对我来说看起来不错:
/'[^\\]*'/.match("'some string \\ hello'") # => nil