class Regexp # Returns the number of backreferencing subexpressions. # # /(a)(b)(c)/.arity #=> 3 # /(a(b(c)))/.arity #=> 3 # # Note: This is not perfect, especially with regards to \x # and embedded comments. def arity self.source.scan( /(?!\\)[(](?!\?[#=:!>-imx])/ ).length end end # _____ _ # |_ _|__ ___| |_ # | |/ _ \/ __| __| # | | __/\__ \ |_ # |_|\___||___/\__| # =begin test require 'test/unit' class TCRegexp < Test::Unit::TestCase def test_arity r = /(1)(2)(3)/ assert_equal( 3, r.arity ) r = /(1)(2)(3)(4)/ assert_equal( 4, r.arity ) r = /(1)(2)((a)3)/ assert_equal( 4, r.arity ) r = /(?#nothing)(1)(2)(3)(?=3)/ assert_equal( 3, r.arity ) end end =end