Sha256: 39634e0ae3ccecbeab3d97144f6426dd7de9b05d012e4fe6f6407e8a366a4e0e

Contents?: true

Size: 1.76 KB

Versions: 16

Compression:

Stored size: 1.76 KB

Contents

class MatchData

  # Returns [ pre_match, matchtree, post_match ]. (see matchtree)
  #
  #   md = /(bb)(cc(dd))(ee)/.match "XXaabbccddeeffXX"
  #   md.to_a      #=> ["XXaabbccddeeffXX", "bb", "ccdd", "dd", "ee"]
  #   md.matchset  #=> ["XXaa", [["bb"], ["cc", ["dd"]], "ee"], "ffXX"]
  #
  def matchset
     [pre_match, matchtree, post_match]
  end

  # An alternate to #to_a which returns the matches in
  # order corresponding with the regular expression.
  #
  #   md = /(bb)(cc(dd))(ee)/.match "XXaabbccddeeffXX"
  #   md.to_a       #=> ["XXaabbccddeeffXX", "bb", "ccdd", "dd", "ee"]
  #   md.matchtree  #=> [["bb"], ["cc", ["dd"]], "ee"]
  #
  def matchtree(index=0)
    ret=[]
    b, e=self.begin(index), self.end(index)
    while (index+=1)<=length
      if index==length || (bi=self.begin(index))>=e
        # we are finished, if something is left, then add it
        ret << string[b, e-b] if e>b
        break
      else
        if bi>=b
          ret << string[b, bi-b] if bi>b
          ret << matchtree(index)
          b=self.end(index)
        end
      end
    end
    return ret
  end

end


#  _____         _
# |_   _|__  ___| |_
#   | |/ _ \/ __| __|
#   | |  __/\__ \ |_
#   |_|\___||___/\__|
#
=begin test

  require 'test/unit'

  class TC_MatchData < Test::Unit::TestCase

    def test_matchtree_01
      md = /(bb)(cc(dd))(ee)/.match "XXaabbccddeeffXX"
      assert_equal( [["bb"], ["cc", ["dd"]], ["ee"]] , md.matchtree )
    end

    def test_matchtree_02
      md = /(bb)c(c(dd))(ee)/.match "XXaabbccddeeffXX"
      assert_equal( [["bb"], "c", ["c", ["dd"]], ["ee"]] , md.matchtree )
    end

    def test_matchset
      md = /(bb)(cc(dd))(ee)/.match "XXaabbccddeeffXX"
      assert_equal( ["XXaa", [["bb"], ["cc", ["dd"]], ["ee"]], "ffXX"] , md.matchset )
    end

  end

=end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
facets-1.4.0 lib/facets/core/matchdata/matchtree.rb
facets-1.4.1 lib/facets/core/matchdata/matchtree.rb
facets-1.4.2 lib/facets/core/matchdata/matchtree.rb
facets-1.4.3 lib/facets/core/matchdata/matchtree.rb
facets-1.4.5 lib/facets/core/matchdata/matchtree.rb
facets-1.4.4 lib/facets/core/matchdata/matchtree.rb
facets-1.7.38 lib/facets/core/matchdata/matchtree.rb
facets-1.7.0 lib/facets/core/matchdata/matchtree.rb
facets-1.7.30 lib/facets/core/matchdata/matchtree.rb
facets-1.7.46 lib/facets/core/matchdata/matchtree.rb
facets-1.8.49 lib/facets/core/matchdata/matchtree.rb
facets-1.8.0 lib/facets/core/matchdata/matchtree.rb
facets-1.8.20 lib/facets/core/matchdata/matchtree.rb
facets-1.8.51 lib/facets/core/matchdata/matchtree.rb
facets-1.8.54 lib/facets/core/matchdata/matchtree.rb
facets-1.8.8 lib/facets/core/matchdata/matchtree.rb