我只是想知道ruby regex是否有一个不匹配的运算符,就像perl中的!~
一样。我觉得使用(?!xxx)
或(?<!xxxx)
不方便,因为您无法在xxx
部分使用正则表达式模式。
答案 0 :(得分:144)
是的:!~
效果很好 - 你可能认为它不会因为it’s missing from the documentation page of Regexp
。不过,它有效:
irb(main):001:0> 'x' !~ /x/
=> false
irb(main):002:0> 'x' !~ /y/
=> true
答案 1 :(得分:3)
支持AFAIK(?!xxx):
2.1.5 :021 > 'abc1234' =~ /^abc/
=> 0
2.1.5 :022 > 'def1234' =~ /^abc/
=> nil
2.1.5 :023 > 'abc1234' =~ /^(?!abc)/
=> nil
2.1.5 :024 > 'def1234' =~ /^(?!abc)/
=> 0
答案 2 :(得分:0)
在perl中,'foobar' !~ /bar/
非常适合测试字符串不包含“ bar”。
在Ruby中,尤其是在具有现代样式指南的情况下,我认为更明确的解决方案更加常规且易于理解:
input = 'foobar'
do_something unless input.match?(/bar/)
needs_bar = !input.match?(/bar/)
也就是说,如果有一种.no_match?
方法,那会很麻烦。