# $B@55,I=8=%\*%V%8%'%/%HCf$N%-%c%W%A%c$N?t(B

**URL:** <https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244>\
**Category:** Development\
**Created:** [May 8, 2010, 8:51am UTC](https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244 "2010-05-08T08:51:48Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![KISHIMOTOS\_Makoto](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/8baadc/32.png) [@KISHIMOTOS\_Makoto](https://www.ruby-forum.com/u/KISHIMOTOS_Makoto)\
**Post date:** [May 8, 2010, 8:51am UTC](https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244/1 "2010-05-08T08:51:48Z")

</div>

e$B$-$7$b$H$G$9e(B

e$B@55,I=8=%\*%V%8%’%/%H$+$i%-%c%W%A%c$N?t$rJV$9%a%=%C%I$,M\_$7$$$G$9!#e(B  
e$B!J54\<V$K$Oe(B onig\_number\_of\_captures e$B$H$$$&4X?t$G$=$&$$$&e(B API  
e$B$,$"$j$^$9!Ke(B

static VALUE  
numcaptures(VALUE re)  
{  
regex\_t \*reg = RREGEXP(re)-\>ptr;  
int capts = onig\_number\_of\_captures(reg);  
return INT2NUM(capts);  
}

rb\_define\_method(rb\_cRegexp, “numcaptures”, &numcaptures, 0);

e$B$I$&$$$&Iw$K;H$&$+!"$G$9$,!"0J2\<$N$h$&$J%a%=%C%I$GKI8fE\*%3!\<%G%#%s%0$N$?$a$Ke(B  
e$B;H$$$^$9!#e(B

class String

def gsub\_multi ptns, alts  
res = []  
ptns.each{|ptn|  
# e$B"($3$3$G%A%’%C%/$7$?$$e(B  
re = Regexp.compile “(#{ptn.to\_s})”  
res \<\< re  
}  
uptn = Regexp.union \*res  
gsub(uptn){  
idx = $~.captures.index{|x|x}  
alts[idx]  
}  
end

end

e$B0J2\<$N$h$&$K;H$&%a%=%C%I$G$9!#e(B

“e$B$G$F$3$$$$$1$N$3$$e(B”.gsub\_multi([/e$B$3$$e(B/, /e$B$$$1e(B/],  
[“e$B$$$1e(B”, “e$B$3$$e(B”])  
=\> “e$B$G$F$$$1$3$$$N$$$1e(B”  
e$B!Je(Bgsub e$B$N7+$jJV$7$G$O$&$^$/$"$j$^$;$s!Ke(B

e$B$3$3$G!“e(Bptnse$B$GM?$($i$l$?@55,I=8=Cf$K%-%c%W%A%c!\<$,$”$k$H!"%$%s%G%C%/%9$,e(B  
e$B$:$l$F$&$^$/$"$j$^$;$s!#$J$N$G!"@55,I=8=Cf$K%-%c%W%A%c$,$J$$$3$H$re(B  
e$B!J$$$/$D$"$k$+!"$H$$$&\>pJs$O$3$NL\E\*$K$O2a\>j$G$9$,!K3NG’$7$?$$!"e(B  
e$B$H$$$&$o$1$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![KISHIMOTOS\_Makoto](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/8baadc/32.png) [@KISHIMOTOS\_Makoto](https://www.ruby-forum.com/u/KISHIMOTOS_Makoto)\
**Post date:** [May 10, 2010, 12:26am UTC](https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244/2 "2010-05-10T00:26:13Z")

</div>

e$B@.@%$G$9!#e(B

(2010/05/08 15:51), KISHIMOTO, Makoto wrote:

> ```
> return INT2NUM(capts);
> res = []
> 
> ```
> 
> end  
> e$B$:$l$F$&$^$/$"$j$^$;$s!#$J$N$G!"@55,I=8=Cf$K%-%c%W%A%c$,$J$$$3$H$re(B  
> e$B!J$$$/$D$"$k$+!"$H$$$&\>pJs$O$3$NL\E\*$K$O2a\>j$G$9$,!K3NG’$7$?$$!"e(B  
> e$B$H$$$&$o$1$G$9!#e(B

onig\_number\_of\_captures  
e$B$KAjEv$9$k%a%=%C%I$O$"$C$F$b$h$$$+$J$H$O;W$&$N$G$9$,!"e(B

- e$B%a%=%C%IL\>e(B
- e$B$=$N%f!\<%9%1!\<%9$G$Oe(B onig\_number\_of\_captures  
e$B$r;H$C$F$b40A4$G$O$J$$e(B  
e$B$,5$$K$J$j$^$9!#e(B

e$B6qBNE\*$K$O!“L\>A0IU$-%-%c%W%A%c$,:.$6$C$?\>l9g!”$=$N%3!\<%I$OF0$+$J$/$J$j$^$9!#e(B  
e$B;W$&$K!"HV9f$G$O$J$/!"L\>A0$G0z$$$?J}$,$$$$$s$8$c$J$$$G$7$g$&$+!#e(B

e$B$A$J$\_$K!"e(BRuby 1.9 e$B$G$Oe(B String#gsub  
e$B$,3HD%$5$l$F$$$F!"0J2\<$N$h$&$J$3$H$,$G$-$^$9!#e(B

“e$B$G$F$3$$$$$1$N$3$$e(B”.gsub(/e$B$3$$e(B|e$B$$$1e(B/,  
“e$B$3$$e(B”=\>“e$B$$$1e(B”, “e$B$$$1e(B”=\>“e$B$3$$e(B”)  
=\> “e$B$G$F$$$1$3$$$N$$$1e(B”

---

<div class="post-metadata">

**Author:** ![KISHIMOTOS\_Makoto](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/8baadc/32.png) [@KISHIMOTOS\_Makoto](https://www.ruby-forum.com/u/KISHIMOTOS_Makoto)\
**Post date:** [May 10, 2010, 5:31am UTC](https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244/3 "2010-05-10T05:31:10Z")

</div>

e$B$?$k$$$H$$$$$^$9!#e(B

e$B@N@55,I=8=%(%s%8%s$N%\*!\<%H%^%H%s:GE,2=$r$“$F$K$7$?;z6g2r@O5!$r:n$l$Pe(Brubye$B$Ge(Bstrscane$B$rJB$Y$k$h$je(B  
e$B9bB.$K$J$k$s$8$c$J$$$+$H;n$\_$?;v$,$”$j$^$7$?!#e(B  
e$B$=$l\<+BN$O7k6Ie(BMatchDatae$B$+$i$N@Z$j=P$7%3%9%H$,7k9=Bg$-$+$C$?$N$G$\*B"F~$j$5$;$?$N$G$9$,!“e(B  
e$B$=$N;~$b%-%c%W%A%c?t$,I,MW$K$J$C$F!”\<!$N$h$&$J%3!\<%I$r=q$$$F$$$^$7$?!#e(B  
def numcaptures(re)  
/|a#{re}/.match(“”).to\_a.size-1  
end  
e$B$“$^$jNI$$%3!\<%I$G$O$J$$$H$O;W$$$^$9$,!”$-$7$b$H$5$s$NNc$K$O4V$K9g$C$F$$$k$H;W$&$N$G!"e(B  
e$B$b$7Aa5^$KI,MW$J$i%a%=%C%I$NDs0F$H$OJL$K$$$+$,$G$7$g$&$+!)e(B

e$B$5$F!“@.@%$5$s$,L\>A0IU$-%-%c%W%A%c$K$D$$$F8@5Z$5$l$F$$$?$N$G!“e(B  
e$B\>/$78=\>u$Ne(BRegexpe$B$K$D$$$FD4$Y$F$\_$?$N$G$9$,;EMM$K$D$$$F$h$/$o$+$i$J$$ItJ,$,e(B  
e$B$”$C$?$N$G$9$,!”$=$l$OJL$K%9%l%C%I$r@Z$C$F%a!\<%k$7$?$$$H;W$$$^$9!#e(B

2010e$BG/e(B5e$B7ne(B10e$BF|e(B7:25 NARUSE, Yui [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> e$B@.@%$G$9!#e(B
> 
> (2010/05/08 15:51), KISHIMOTO, Makoto wrote:
> 
> > e$B$-$7$b$H$G$9e(B
> > 
> > e$B@55,I=8=%\*%V%8%'%/%H$+$i%-%c%W%A%c$N?t$rJV$9%a%=%C%I$,M\_$7$$$G$9!#e(B  
> > e$B!J54\<V$K$Oe(B onig\_number\_of\_captures e$B$H$$$&4X?t$G$=$&$$$&e(B API e$B$,$"$j$^$9!Ke(B  
> > (snip)

---

<div class="post-metadata">

**Author:** ![KISHIMOTOS\_Makoto](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/8baadc/32.png) [@KISHIMOTOS\_Makoto](https://www.ruby-forum.com/u/KISHIMOTOS_Makoto)\
**Post date:** [May 11, 2010, 3:55am UTC](https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244/4 "2010-05-11T03:55:20Z")

</div>

e$B@.@%$G$9!#e(B

2010e$BG/e(B5e$B7ne(B11e$BF|e(B10:27 KISHIMOTO, Makoto  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > e$B6qBNE\*$K$O!“L\>A0IU$-%-%c%W%A%c$,:.$6$C$?\>l9g!”$=$N%3!\<%I$OF0$+$J$/$J$j$^$9!#e(B  
> > e$B;W$&$K!"HV9f$G$O$J$/!"L\>A0$G0z$$$?J}$,$$$$$s$8$c$J$$$G$7$g$&$+!#e(B
> 
> if ptn.numcapturs \> 0 then raise end e$B$N$h$&$K%A%'%C%/$9$k$N$G$9$,!"e(B
> 
> e$BL\>A0IU$-%-%c%W%A%c$be(Bonig\_number\_of\_capturese$B$G?t$($i$l$k$N$Ge(Bfalse  
> negativee$B$G$O$J$$$G$9$7!"L\>A0IU$-%-%c%W%A%c$OIaDL$N%-%c%W%A%c$H$7$F$bF/$/$N$G!"e(B  
> false positivee$B$G$b$J$/!"LdBj$J$$$O$:$G$O$J$$$G$7$g$&$+!)e(B

e$BL\>A0IU$-%-%c%W%A%c$OIaDL$N%-%c%W%A%c$N$h$&$K%$%s%G%C%/%9$G0z$1$k$s$G$9$,!"e(B  
e$B0lJ}$GL\>A0IU$-%-%c%W%A%c$,F~$k$HIaDL$N%+%C%3$G$O%-%c%W%A%c$5$l$J$/$J$k$s$G$9$h!#e(B

> “e$B$G$F$3$$$$$1$N$3$$e(B”.gsub\_multi([/(?e$B$3$$e(B)/, /e$B$$$1e(B/], [“e$B$$$1e(B”, “e$B$3$$e(B”])  
> TypeError: no implicit conversion from nil to integer  
> from (irb):14:in `[]' from (irb):14:in `block in gsub\_multi’  
> from (irb):12:in `gsub' from (irb):12:in `gsub\_multi’  
> from (irb):20  
> from /home/naruse/local/ruby-trunk/bin/irb:12:in `’

---

<div class="post-metadata">

**Author:** ![KISHIMOTOS\_Makoto](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/8baadc/32.png) [@KISHIMOTOS\_Makoto](https://www.ruby-forum.com/u/KISHIMOTOS_Makoto)\
**Post date:** [May 11, 2010, 3:28am UTC](https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244/5 "2010-05-11T03:28:24Z")

</div>

e$B$-$7$b$H$G$9e(B

> onig\_number\_of\_captures e$B$KAjEv$9$k%a%=%C%I$O$"$C$F$b$h$$$+$J$H$O;W$&$N$G$9$,!"e(B
> 
> - e$B%a%=%C%IL\>e(B

e$B$?$7$+$K:#$N$H$3$mB\>$Ke(B num???s  
e$B$H$$$&%a%=%C%I$C$F$J$$$G$9$h$M$'e(B

> - e$B$=$N%f!\<%9%1!\<%9$G$Oe(B onig\_number\_of\_captures e$B$r;H$C$F$b40A4$G$O$J$$e(B  
> e$B$,5$$K$J$j$^$9!#e(B
> 
> e$B6qBNE\*$K$O!“L\>A0IU$-%-%c%W%A%c$,:.$6$C$?\>l9g!”$=$N%3!\<%I$OF0$+$J$/$J$j$^$9!#e(B  
> e$B;W$&$K!"HV9f$G$O$J$/!"L\>A0$G0z$$$?J}$,$$$$$s$8$c$J$$$G$7$g$&$+!#e(B

if ptn.numcapturs \> 0 then raise end  
e$B$N$h$&$K%A%’%C%/$9$k$N$G$9$,!"e(B

e$BL\>A0IU$-%-%c%W%A%c$be(Bonig\_number\_of\_capturese$B$G?t$($i$l$k$N$Ge(Bfalse  
negativee$B$G$O$J$$$G$9$7!"L\>A0IU$-%-%c%W%A%c$OIaDL$N%-%c%W%A%c$H$7$F$bF/$/$N$G!"e(B  
false positivee$B$G$b$J$/!"LdBj$J$$$O$:$G$O$J$$$G$7$g$&$+!)e(B

---

<div class="post-metadata">

**Author:** ![KISHIMOTOS\_Makoto](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/8baadc/32.png) [@KISHIMOTOS\_Makoto](https://www.ruby-forum.com/u/KISHIMOTOS_Makoto)\
**Post date:** [May 12, 2010, 5:30am UTC](https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244/6 "2010-05-12T05:30:13Z")

</div>

2010e$BG/e(B5e$B7ne(B12e$BF|e(B10:02 KISHIMOTO, Makoto  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> /foo/, /bar/, /baz/ e$B$+$ie(B /(foo)|(bar)|(baz)/ e$B$N$h$&$Je(B Regexp e$B$r:n$C$F!"e(B  
> e$B%^%C%A$5$;$F!"e(B$~.captures.index{|x|x} e$B$G2?HVL$,%^%C%A$7$?$+8+$D$1$F$$$k$N$G!“e(B  
> e$BDL\>o$N%-%c%W%A%c$G$”$C$F$b!“F~NOCf$KB8:\_$9$k$H!”$:$l$k$N$G:$$k$o$1$G$9!#e(B
> 
> e$B$J$N$G!“%-%c%W%A%c$,F~NO$K$”$C$?$i%(%i!\<$K$9$k!“$H$$$&%A%'%C%/$rF~$l$k!”$H!#e(B  
> e$BL\>A0IU$-%-%c%W%A%c$,F~NO$K$“$k\>l9g$b!”$=$l$r8+$D$1$F%(%i!\<$K$9$k$@$1$G$9!#e(B

e$BHV9f$8$c$J$/$Fe(B unique  
e$B$JL\>A0$r$D$1$F$7$i$Y$k$N$O$I$&$G$9$+$M!#e(B

% ruby -e ’  
/(?foo)|(?bar)|(?baz)/ =~ “bar”  
p %w[r0 r1 r2].index {|n| $~[n] }’  
1

r1, r2, r3  
e$B$J$I$NL\>A0$,\>WFM$7$=$&$J$i$b$C$HD9$$L\>A0$K$7$F$/$@$5$$!#e(B

---

<div class="post-metadata">

**Author:** ![KISHIMOTOS\_Makoto](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/8baadc/32.png) [@KISHIMOTOS\_Makoto](https://www.ruby-forum.com/u/KISHIMOTOS_Makoto)\
**Post date:** [May 12, 2010, 3:05am UTC](https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244/7 "2010-05-12T03:05:04Z")

</div>

e$B$-$7$b$H$G$9e(B

> TypeError: no implicit conversion from nil to integer  
> from (irb):14:in `[]' from (irb):14:in`block in gsub\_multi’  
> from (irb):12:in `gsub' from (irb):12:in`gsub\_multi’  
> from (irb):20  
> from /home/naruse/local/ruby-trunk/bin/irb:12:in `’

/foo/, /bar/, /baz/ e$B$+$ie(B /(foo)|(bar)|(baz)/ e$B$N$h$&$Je(B Regexp  
e$B$r:n$C$F!"e(B  
e$B%^%C%A$5$;$F!"e(B$~.captures.index{|x|x}  
e$B$G2?HVL$,%^%C%A$7$?$+8+$D$1$F$$$k$N$G!“e(B  
e$BDL\>o$N%-%c%W%A%c$G$”$C$F$b!“F~NOCf$KB8:\_$9$k$H!”$:$l$k$N$G:$$k$o$1$G$9!#e(B

e$B$J$N$G!"%-%c%W%A%c$,F~NO$K$"$C$?$i%(%i!\<$K$9$k!"$H$$$&%A%’%C%/$rF~$l$k!"$H!#e(B  
e$BL\>A0IU$-%-%c%W%A%c$,F~NO$K$"$k\>l9g$b!"$=$l$r8+$D$1$F%(%i!\<$K$9$k$@$1$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![KISHIMOTOS\_Makoto](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/8baadc/32.png) [@KISHIMOTOS\_Makoto](https://www.ruby-forum.com/u/KISHIMOTOS_Makoto)\
**Post date:** [May 14, 2010, 9:40am UTC](https://www.ruby-forum.com/t/b-55-i-8-v-8-hcf-n-c-w-a-c-n-t-b/188244/8 "2010-05-14T09:40:21Z")

</div>

e$B$-$7$b$H$G$9e(B

e$B$9$C$+$jK\Bj$N$[$&$rK:$l$F$7$^$C$F$$$^$7$?$,!"e(B

> onig\_number\_of\_captures e$B$KAjEv$9$k%a%=%C%I$O$"$C$F$b$h$$$+$J$H$O;W$&$N$G$9$,!"e(B
> 
> - e$B%a%=%C%IL\>e(B

e$B;w$?$h$&$JL\>A0$H$$$&$3$H$Ge(B Array#nitems  
e$B$H$$$&%a%=%C%I$,$"$k!J$"$C$?!)!K$N$re(B  
e$B8+$D$1$?$N$G$9$,!"e(BRegexp#ncaptures  
e$B$H$$$&$N$O$I$&$G$7$g$&$+!)e(B

MatchData#captures e$B$H$N0UL#$N%:%l$,5$$K$J$k$H$3$m$G$7$g$&$+!#e(B
