Ruby 正则表达式以匹配除反斜杠以外的任何字符

Ruby 正则表达式以匹配除反斜杠以外的任何字符,ruby,regex,Ruby,Regex,在Ruby字符类中如何说“除反斜杠以外的所有符号” /'[^\]*'/.match("'some string \ hello'") => should be nil 带有两个反斜杠的变体不起作用 /'[^\\]*'/.match("'some string \ hello'") => 'some string \ hello' BUT should be nil 您需要避开反斜杠: [^\\]* 因为反斜杠是正则表达式中的转义字符,因此在这里转义右括号 如果要验证整个字符

在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

Ruby正则表达式调试的一个很好的资源是:是的,特别是当irb不可用时,我在写这个问题之前尝试过它,但它不起作用。(ruby 1.9.2)它将匹配反斜杠之前的部分不,它匹配整个字符串,我添加了单引号来显示它