Accessing MatchData results in StringScanner

Is it possible using #scan or any other method of StringScanner to get
access to captured sub-expressions in the supplied regexp?

For example, something like:
  ss = StringScanner.new( "Hello __World__" )

  while ...
    if md = ss.scan( /__([^_]+)__/ )
      # I would like md to be a MatchData, not a String
      # because I want access to the first capture;
      # $1 (which I dislike on principle anyway) is not
      # updated by the call to #scan
    end
  end

If the answer is 'no'...might this be a good addition? Perhaps as a new
method (in case returning a MatchData was much slower than a String)?

ss[1]

···

On 6/20/05, Phrogz <gavin@refinery.com> wrote:

Is it possible using #scan or any other method of StringScanner to get
access to captured sub-expressions in the supplied regexp?

For example, something like:
  ss = StringScanner.new( "Hello __World__" )

  while ...
    if md = ss.scan( /__([^_]+)__/ )
      # I would like md to be a MatchData, not a String
      # because I want access to the first capture;
      # $1 (which I dislike on principle anyway) is not
      # updated by the call to #scan
    end
  end

If the answer is 'no'...might this be a good addition? Perhaps as a new
method (in case returning a MatchData was much slower than a String)?

Phrogz wrote:

Is it possible using #scan or any other method of StringScanner to get
access to captured sub-expressions in the supplied regexp?

For example, something like:
  ss = StringScanner.new( "Hello __World__" )

  while ...
    if md = ss.scan( /__([^_]+)__/ )
      # I would like md to be a MatchData, not a String
      # because I want access to the first capture;
      # $1 (which I dislike on principle anyway) is not
      # updated by the call to #scan
    end
  end

If the answer is 'no'...might this be a good addition? Perhaps as a new
method (in case returning a MatchData was much slower than a String)?

Read the docs :slight_smile:
http://www.ruby-doc.org/stdlib/libdoc/strscan/rdoc/classes/StringScanner.html
http://www.ruby-doc.org/stdlib/libdoc/strscan/rdoc/classes/StringScanner.html#M000039

use #
ss[1] is like $1

-Charlie

Thanks muchly (to Logan as well)!

···

--
Gavin "What's RTFM mean?" Kistner