Ruby正则表达式在Perl中是否有像“!〜”这样的不匹配运算符?

时间:2012-12-07 07:57:58

标签: ruby regex

我只是想知道ruby regex是否有一个不匹配的运算符,就像perl中的!~一样。我觉得使用(?!xxx)(?<!xxxx)不方便,因为您无法在xxx部分使用正则表达式模式。

3 个答案:

答案 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?方法,那会很麻烦。