104

我只想知道 ruby​​ 正则表达式是否像!~perl 中那样有一个不匹配运算符。我觉得使用起来很不方便,(?!xxx)或者(?<!xxxx)因为您不能在xxx零件中使用正则表达式模式。

4

3 回答 3

178

是的:!~工作得很好——你可能认为它不会,因为它在Regexp. 尽管如此,它仍然有效:

irb(main):001:0> 'x' !~ /x/
=> false
irb(main):002:0> 'x' !~ /y/
=> true
于 2012-12-07T08:04:50.737 回答
6

支持 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
于 2015-02-06T03:04:17.037 回答
-1

回到 perl,'foobar' !~ /bar/测试字符串不包含“bar”是完全错误的。

在 Ruby 中,尤其是现代风格指南,我认为更明确的解决方案更传统且易于理解:

input = 'foobar'

do_something unless input.match?(/bar/) 

needs_bar = !input.match?(/bar/)

也就是说,我认为如果有一种.no_match?方法会很漂亮。

于 2020-09-04T14:21:46.067 回答