在Ruby字符类中,我如何说“除反斜杠外的所有符号”?
/'[^\]*'/.match("'some string \ hello'") => should be nil
带有两个反斜杠的变量不起作用
/'[^\\]*'/.match("'some string \ hello'") => 'some string \ hello' BUT should be nil
rm5edbpk1#
您的问题不在于正则表达式;你做对了。2你的问题是你的测试字符串中没有反斜杠。3它有一个转义的空格。4试试看:
str = "'some string \\ hello'" puts str #=> 'some string \ hello' p /'[^\\]*'/.match(str) #=> nil
vzgqcmou2#
您需要转义反斜杠:
[^\\]*
因为反斜杠是正则表达式中的转义符,因此在这里转义了右括号。如果要验证整个字符串是否包含非反斜杠字符,则需要锚点:
^[^\\]*$
rsaldnfx3#
实际上,在您的字符串中没有反斜杠可供匹配。请尝试只查看您的输入:
"'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
cqoc49vn4#
这是相关的Csharp..但idk它可能会帮助你。
[^\\\\]*
四个斜线而不是两个。
4条答案
按热度按时间rm5edbpk1#
您的问题不在于正则表达式;你做对了。2你的问题是你的测试字符串中没有反斜杠。3它有一个转义的空格。4试试看:
vzgqcmou2#
您需要转义反斜杠:
因为反斜杠是正则表达式中的转义符,因此在这里转义了右括号。
如果要验证整个字符串是否包含非反斜杠字符,则需要锚点:
rsaldnfx3#
实际上,在您的字符串中没有反斜杠可供匹配。请尝试只查看您的输入:
双引号中的“\“将被转义为一个空格:
如果不想匹配斜杠,则需要两个斜杠,就像第二个示例一样,我觉得这很不错:
cqoc49vn4#
这是相关的Csharp..但idk它可能会帮助你。
四个斜线而不是两个。