Does Ruby regular expression have a not match operator like “!~” in Perl?

前端 未结 3 1882
醉梦人生
醉梦人生 2020-12-13 03:12

I just want to know whether ruby regex has a not match operator just like !~ in perl. I feel it\'s inconvenient to use (?!xxx)or (?

相关标签:
3条回答
  • 2020-12-13 03:37

    Back in perl, 'foobar' !~ /bar/ was perfectly perlish to test that the string doesn't contain "bar".

    In Ruby, particularly with a modern style guide, I think a more explicit solution is more conventional and easy to understand:

    input = 'foobar'
    
    do_something unless input.match?(/bar/) 
    
    needs_bar = !input.match?(/bar/)
    

    That said, I think it would be spiffy if there was a .no_match? method.

    0 讨论(0)
  • 2020-12-13 03:39

    AFAIK (?!xxx) is supported:

    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
    
    0 讨论(0)
  • 2020-12-13 03:56

    Yes: !~ works just fine – you probably thought it wouldn’t because it’s missing from the documentation page of Regexp. Nevertheless, it works:

    irb(main):001:0> 'x' !~ /x/
    => false
    irb(main):002:0> 'x' !~ /y/
    => true
    
    0 讨论(0)
提交回复
热议问题