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

时间:2012-07-24 20:29:19

标签: ruby regex

如何在Ruby字符类中说“除反斜杠之外的所有符号”?

/'[^\]*'/.match("'some string \ hello'")  => should be nil

带有两个反斜杠的变体不起作用

/'[^\\]*'/.match("'some string \ hello'")  => 'some string \ hello' BUT should be nil

3 个答案:

答案 0 :(得分:8)

你的问题不在于你的正则表达式;你说对了。您的问题是您的测试字符串没有反斜杠。相反,它有一个逃逸的空间。试试这个:

str = "'some string \\ hello'"
puts str                 #=> 'some string \ hello'
p /'[^\\]*'/.match(str)  #=> nil

答案 1 :(得分:4)

你需要逃避反斜杠:

[^\\]*

因为反斜杠是正则表达式中的转义字符,因此在此处转义结束括号。

如果要验证整个字符串是否包含非反斜杠字符,则需要锚点:

^[^\\]*$

答案 2 :(得分:3)

实际上你的字符串中没有反斜杠可以匹配。试着看看你的输入:

"'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