如何在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
您需要转义反斜线:
[^\\]*
因为反斜线在正则表达式的转义字符,从而逃避关闭括号在这里。
如果您想验证整个字符串包含非反斜杠字符,那么你需要锚:
^[^\\]*$
我试了一下之前e写这个问题,但它不起作用。 (红宝石1.9.2) – 2012-07-24 20:39:09
那么,它会匹配反斜杠 – Joey 2012-07-24 20:40:18
之前的部分*,它匹配整个字符串,我添加了单引号以显示它 – 2012-07-24 20:46:08
实际上在你的字符串中没有反斜杠来匹配。尝试采取一看只是你输入:
"'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的正则表达式调试一个很好的资源是:http://rubular.com/ – Teddy 2012-07-24 20:31:42
是的,尤其是当IRB不可 – 2012-07-24 20:55:03