https://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112015-04-08T11:18:14ZRuby Issue Tracking SystemRuby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=520742015-04-08T11:18:14Zrecursive-madman (Recursive Madman)recursive.madman@gmx.de
<ul></ul><p>How about implementing <code>Regexp#invert</code> instead?</p>
<pre><code class="ruby syntaxhl" data-language="ruby"> <span class="sr">/b/</span><span class="p">.</span><span class="nf">invert</span> <span class="c1">#=> /[^(?:b)]/</span>
</code></pre>
<p>Like this for example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Regexp</span>
<span class="k">def</span> <span class="nf">invert</span>
<span class="nb">self</span><span class="p">.</span><span class="nf">class</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"[^(?:</span><span class="si">#{</span><span class="n">source</span><span class="si">}</span><span class="s2">)]"</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="sx">%w(aaa bbb ccc)</span><span class="p">.</span><span class="nf">grep</span><span class="p">(</span><span class="sr">/b/</span><span class="p">)</span> <span class="c1">#=> ["bbb"]</span>
<span class="sx">%w(aaa bbb ccc)</span><span class="p">.</span><span class="nf">grep</span><span class="p">(</span><span class="sr">/b/</span><span class="p">.</span><span class="nf">invert</span><span class="p">)</span> <span class="c1">#=> ["aaa", "ccc"]</span>
</code></pre> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=520752015-04-08T11:21:06ZEregon (Benoit Daloze)
<ul></ul><p>Recursive Madman wrote:</p>
<blockquote>
<p>How about implementing <code>Regexp#invert</code> instead?</p>
<p>Like this for example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Regexp</span>
<span class="k">def</span> <span class="nf">invert</span>
<span class="nb">self</span><span class="p">.</span><span class="nf">class</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"[^(?:</span><span class="si">#{</span><span class="n">source</span><span class="si">}</span><span class="s2">)]"</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
</blockquote>
<p>That only works for some regexps, I doubt there is a proper and well defined inverted regexp for any Regexp.</p> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=520762015-04-08T11:22:48ZEregon (Benoit Daloze)
<ul></ul><p>grep(pattern, inverse: true) seems the least surprising to me.<br>
But of course it does not buy much compared to #reject.</p> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=520782015-04-08T11:31:33Zrecursive-madman (Recursive Madman)recursive.madman@gmx.de
<ul></ul><p>Benoit Daloze wrote:</p>
<blockquote>
<p>That only works for some regexps, I doubt there is a proper and well defined inverted regexp for any Regexp.</p>
</blockquote>
<p>Could you provide an example that doesn't work?</p> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=520792015-04-08T11:42:01Zakr (Akira Tanaka)akr@fsij.org
<ul></ul><p>Recursive Madman wrote:</p>
<blockquote>
<p>Benoit Daloze wrote:</p>
<blockquote>
<p>That only works for some regexps, I doubt there is a proper and well defined inverted regexp for any Regexp.</p>
</blockquote>
<p>Could you provide an example that doesn't work?</p>
</blockquote>
<pre><code>class Regexp
def invert
self.class.new("[^(?:#{source})]")
end
end
%w(aaa bbb ccc).grep(/abc/) #=> []
%w(aaa bbb ccc).grep(/abc/.invert) #=> []
</code></pre> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=520802015-04-08T12:00:54Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul></ul><p><code>invert</code> looks same as my proposal, <code>Regexp#!</code>.</p> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=520822015-04-08T16:45:48Zsawa (Tsuyoshi Sawada)
<ul></ul><p>How is this proposal different from <a class="issue tracker-2 status-7 priority-4 priority-default closed" title="Feature: Logic with `Enumerable#grep` (Feedback)" href="https://redmine.ruby-lang.org/issues/9602">#9602</a>? I thought that Matz had already suggested to modify <code>select</code>, and Sam Rawlins had implemented <code>select</code> and <code>reject</code>.</p> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=520862015-04-09T05:44:59Zsorah (Sorah Fukumori)her@sorah.jp
<ul><li><strong>Assignee</strong> set to <i>matz (Yukihiro Matsumoto)</i></li></ul><p>I didn't know/hear that.</p>
<p><a class="user active user-mention" href="https://redmine.ruby-lang.org/users/13">@matz (Yukihiro Matsumoto)</a> what do you think for now?</p> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=521072015-04-11T05:56:26Zakr (Akira Tanaka)akr@fsij.org
<ul><li><strong>Related to</strong> <i><a class="issue tracker-2 status-5 priority-4 priority-default closed" href="/issues/5588">Feature #5588</a>: add negation flag (v) to Regexp</i> added</li></ul> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=521122015-04-11T12:50:00Zakr (Akira Tanaka)akr@fsij.org
<ul><li><strong>Related to</strong> <i><a class="issue tracker-2 status-7 priority-4 priority-default closed" href="/issues/9602">Feature #9602</a>: Logic with `Enumerable#grep`</i> added</li></ul> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=521962015-04-19T20:30:32Zharaldb (Harald Böttiger)bottiger@live.com
<ul></ul><p>Recursive Madman wrote:</p>
<blockquote>
<p>How about implementing <code>Regexp#invert</code> instead?</p>
</blockquote>
<p>As grep using the case statement this would be ignoring a lot of cases that would be handy:</p>
<blockquote>
<p>array.invert_grep(Array) # Select all elements that are not arrays.</p>
</blockquote> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=524412015-05-14T06:31:09Zmatz (Yukihiro Matsumoto)matz@ruby.or.jp
<ul></ul><p><code>grep_v</code> seems OK. Accepted.</p>
<p>Matz.</p> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=524492015-05-14T10:44:14Zsorah (Sorah Fukumori)her@sorah.jp
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>Thanks, committed at r50491, r50492.</p> Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)https://redmine.ruby-lang.org/issues/11049?journal_id=572482016-03-03T04:39:52Zshyouhei (Shyouhei Urabe)shyouhei@ruby-lang.org
<ul><li><strong>Related to</strong> <i><a class="issue tracker-2 status-1 priority-4 priority-default" href="/issues/8921">Feature #8921</a>: Allow select, reject, etc to accept a regex</i> added</li></ul>