From: Tanaka Akira Date: 2002-04-12T03:30:39+09:00 Subject: [ruby-dev:16863] Re: sharing sub-regexp In article , Tanaka Akira writes: > $B$&$%$`!#$3$3$O$J$+$J$+G:$_$I$3$m$G$9!#(B > $B$A$g$C$H9M$($F$_$?$$$H;W$$$^$9!#(B $B9M$($F$_$^$7$?!#(B $B$^$:!"%Q%?!<%sJ#@=$O$$$i$J$$$N$G$O$J$$$+$H;W$$$^$9!#M}M3$O(B 2$B$D$"$j$^$9!#(B * $B%Q%?!<%s$N%=!<%9$rJ8;zNs$H$7$F(B #{} $B$GE83+$9$k$3$H$K$h$j!"F1Ey$N8z2L(B $B$,F@$i$l$k!#(B # #{} $B$NCf$K(B Regexp $B%*%V%8%'%/%H$,$-$?$i%=!<%9$r(B shy group $B$G3g$C$F(B # $BE83+$7$FM_$7$$$H$$$&OC$OJL$NOC$H$7$F$"$k!#(B * $B%Q%?!<%s6&M-$H%Q%?!<%sJ#@=$OB.EY$H%a%b%j;HMQNL$,0[$J$k$b$N$N!"5!G=$H(B $B$7$F$OF1$8$G$"$j!"%W%m%0%i%^$KD>@\A*Br$5$;$k$Y$-$b$N$H$$$&$h$j$b!"(B ($B%3%s%Q%$%i$K$h$k4X?t$N(B inlining $B$N$h$&$K(B)optimization $B$H$H$i$($?J}(B $B$,$$$$$N$G$O$J$$$+!#(B $B$H$$$&$o$1$G!"$H$j$"$($:%Q%?!<%sJ#@=$O$J$/$7$F!"I,MW$J$i%5%V%Q%?!<%sFb(B $BIt$rA4ItE83+$9$k%*%W%7%g%s$r%R%s%H$H$7$FF3F~$9$k$N$,$$$$$N$G$O$J$$$+$H(B $B;W$$$^$9!#(B $B$G!";d$O(B($B3NJ]$9$kJ8;z$O0l$D$G==J,$J$N$G(B)$BBgJ8;z>.J8;z$NBP$r3NJ]$9$kI,MW(B $B$O$J$$$H$$$&N)>l$K$J$k$o$1$G$9$,!"(B* $B$r;H$C$F(B (?*name) $B$"$k$$$O(B (?*) $B$r?d$7$^$9!#$3$N(B * $B$H$$$&$N$O(B C $B$N%]%$%s%?$N(B dereference $B$K(B $BM3Mh$7$F$$$^$9!#(B $B$^$?!"8eJ};2>H$K$D$$$F$O!"CV49$H7A<0$r$"$o$;$k$H$$$$$s$8$c$J$$$+$H;W$$$^$9!#(B $B8=:_$O8eJ};2>H$HCV49$G(B \1 $B$H$$$&7A<0$O6&DL$7$F$$$k$o$1$G!"L>A0$r;H$&;~(B $B$bAPJ}$,F1$8$b$N$G$"$k$H%W%m%0%i%^$K$H$C$F$N:.Mp$,>/$J$$$N$G$O$J$$$+!"(B $B$H$$$&$o$1$G$9!#(B $B$=$7$F!"@h$N%a!<%k$K=q$$$?DL$j!"CV49$N%F%s%W%l!<%H$K(B $ $B$H$$$&?7$7$$%a(B $B%?%-%c%i%/%?$rF3F~$9$k$N$O$A$HLn?4E*2a$.$k$H;W$&$N$G!"(B\ $B$G$O$8$^$k!"(B Python $B$NCV49$N(B \g $B$J$$$7$O(B .NET $B$N8eJ};2>H$N(B \k $B$N$I$A$i$+$r(BRuby $B$NCV49$H8eJ};2>H$G;H$($k$HNI$$$N$G$O$J$$$+$H;W$$$^$9!#(B g $B$H(B k $B$H$I$A$i$,$$$$$+$H$$$&$H!";d$O(B group $B$N(B g $B$H$$$&$3$H$G(B g $B$r?d$7(B $B$^$9!#(B $B$"$H!"(B{} $B$h$j$b(B <> $B$N$[$&$,!"4{B8$N$H;w$F$$$FNI$$$H;W$&$N$G!"(B 1. $BL>A0Dj5A(B: (?...) (pattern, capture) 2. $BL>A0Dj5A(B: (?<:name>...) (pattern$B$N$_!"(Bcapture$B$J$7(B) 3. $B8eJ};2>H(B: \g 4. $BCV49(B: \g 5. $B%Q%?!<%s6&M-(B: (?*name) or (?*capture-number) $B$H$$$&$N$,$$$$$+$J!"$H;W$&$s$G$9$,!"$I$&$G$7$g$&$+(B? $B$"!"%Q%?!<%sE83+$r<($9$N%*%W%7%g%s$r!"(BInline $B$N(B I $B$H$9$l$P(B 6. $B%Q%?!<%sE83+%*%W%7%g%s(B: (?I) $B$b$+$J!#$J$/$F$b$$$$$H;W$$$^$9$,!#(B $B$"$H!"(B($BA0$K$$$i$J$$$H=q$$$?$N$K(B)$B:F5"E*$JDj5A$b07$($k$h$&$K$7$FM_$7$$$H(B $B$+$$$C$?$iJr$l$A$c$$$^$9$+(B? $B$3$l$,$G$-$k$H3g8L$NBP$d!"0lHL$K(B BNF $B$,=q(B $B$1$k$h$&$K$J$k$s$G$9$,!#(B /...(?*non-terminal-1)... (?# start ) |[^\s\S] (?...(?*non-terminl-2)...) |[^\s\S] (?...(?*non-terminl-1)...) ... /x $B$H$+=q$1$k$H!"0lHL$K(B BNF $B$_$?$$$J$b$N$,=q$1$k$o$1$G$9!#$?$H$($P!"(B /(?) (?*data) )* |[^\s\S] (? \( (?*contents) \) ) |[^\s\S] (? [^()]* ) /x $B$H$$$&$h$&$KBP$K$J$C$?3g8L$r=q$1$k$H$+!#(B # [^\s\S] $B$H$$$&$N$O7h$7$F%^%C%A$7$J$$%Q%?!<%s$N$D$b$j$G$9!#(B[] $B$C$F=q(B # $B$1$k$H$$$$$s$G$9$1$I$M!#Nr;KE*$K(B []] $B$H$$$&$N$,5v$5$l$F$k$+$iFq$7$$(B # $B$s$G$7$g$&$,!#(B $B$?$@!":F5"E*$JDj5A$,$"$k$H!"$"$k%5%V%Q%?!<%s$N@hF,$K8=$l$kJ8;z$N=89g$r(B $B5a$a$k$N$,Fq$7$/$J$k(B($B%\%H%`%"%C%W$K$O5a$a$i$l$J$/$F!"ITF0E@$KE~C#$9$k(B $B$^$G7+$jJV$9I,MW$,$"$k(B)$B$7!":8:F5"$J$b$N$rAGKQ$KF0$+$9$HL58B%k!<%W$K$J(B $B$k$J$I!"u$N%G!<%?9=B$$,07$($k$H(B($B>e5-$N(B \( $B$H(B \) $B$N(B $B$+$o$j$K(B <(?\w+)> $B$H(B > $B$N$h$&$J%Q%?!<%s$r;H$&$3$H$K$h$j(B) $B@07A<0$N(B XML $B$r07$($k$h$&$K$J$k$N$G$=$&$$$&$b$N$bM_$7$$$h$&$J5$$,$7$F(B $B$$$^$9!#(B # .NET $B$N(B Balancing group definition $B$r$A$c$s$HD4$Y$J$1$l$P(B... $B$^$!!";d$NMWK>$O$+$J$jFC