From: "Haase, Konstantin" Date: 2011-11-08T11:30:43+09:00 Subject: [ruby-core:40826] Re: [ruby-trunk - Feature #5588] add negation flag (v) to Regexp It is not to hard to negate a regexp, though. Simply wrap it as negative look-ahead. Konstantin On Nov 7, 2011, at 23:04 , Suraj Kurapati wrote: > > Issue #5588 has been updated by Suraj Kurapati. > > > Note that I am not asking for the ability to take an arbitrary regexp and construct its negated form (that is a hard problem). Instead, I am asking for a flag that simply inverts how a regexp is treated by the =~ and !~ operators (this is not a hard problem). The negation flag should not change the Regexp#source of a regexp. > > Thanks for your consideration. > ---------------------------------------- > Feature #5588: add negation flag (v) to Regexp > http://redmine.ruby-lang.org/issues/5588 > > Author: Suraj Kurapati > Status: Open > Priority: Normal > Assignee: > Category: > Target version: > > > Please add a negation flag (v) to regexps which inverts them: > > "ruby" =~ /perl/v #=> true (turn on negation) > "ruby" !~ /perl/v #=> false (turn on negation) > "ruby" =~ /(?v:perl)/ #=> true (turn on negation) > "ruby" !~ /(?v:perl)/ #=> false (turn on negation) > "ruby" =~ /(?-v:perl)/ #=> false (turn off negation) > "ruby" !~ /(?-v:perl)/ #=> true (turn off negation) > > The flag name "v" comes from the ex(1) command of the same name. > > This has beneficial applications where it is sometimes difficult > to construct what you want to match but much easier to construct > what you *do not* want to match. Having this negation built in > the regexp itself would remove the need for us to change our > Ruby code to process a regexp in a different way. > > For example, suppose that you are passing a regexp to the `--name` > command-line option of MiniTest. This regexp tells MiniTest to > only run those tests whose names match. If Ruby had a negation > flag on its regexps, then it would be suddenly trivial to make > MiniTest skip certain tests by negating the regexp we pass in. > > In this manner, we get a beneficial feature without ever changing > our Ruby code (the codebase of MiniTest in this example). :-) > > Thanks for your consideration. > > > -- > http://redmine.ruby-lang.org >