From: mail@...
Date: 2018-12-21T11:40:31+00:00
Subject: [ruby-core:90657] [Ruby trunk Feature#15446] Add a method `String#matches` to the Ruby core

Issue #15446 has been updated by sos4nt (Stefan Sch����ler).


Regarding the name ��� I'd prefer `String#each_match`. 

And it should accept an optional block which yields the matches and (as opposed to `gsub`) returns the receiver (i.e. no substitution):

> each_match(pattern) { |match| block } ��� str
> each_match(pattern) ��� enumerator


----------------------------------------
Feature #15446: Add a method `String#matches` to the Ruby core
https://bugs.ruby-lang.org/issues/15446#change-75822

* Author: CaryInVictoria (Cary Swoveland)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
`String#matches` would be an alias of the form "gsub(pattern) ��� enumerator" of [String#gsub](http://ruby-doc.org/core-2.5.1/String.html#method-i-gsub). 

I frequently use this form of `gsub` instead of `scan` when chaining to Enumerable methods. That's because `gsub` returns an enumerator whereas `scan` returns a temporary array. This use of `gsub` can also be useful when the pattern contains capture groups, which is sometimes a complication when using `scan` (such as when a capture group is needed for back-referencing).

Here is a simple example of its use.

    str = "Tina was friends with Mary and Sue. Tina and Mary loved to party. Sue and Tina went bowling every Thursday."

    str.gsub(/\b(?:Tina|Mary|Sue)\b/).each_with_object(Hash.new(0)) { |p,h| h[p] += 1 }
       #=> {"Tina"=>3, "Mary"=>2, "Sue"=>2}  
 
The problem with using `gsub` in this way is that it is confusing to readers who are expecting character substitutions to be performed. I also believe that the name of this method (the "sub" in `gsub`) has resulted in the form of the method that returns an enumerator to be under-appreciated and under-used.

Again, I am proposing that an alias be provided for the form of `gsub` that returns an enumerator. I suggest `String#matches`, but the choice of name is secondary.


  



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>