[#41278] [BUG:1.9] BINARY should not be ASCII-compatible — Yugui <yugui@...>

WXVndWkbJEIkRyQ5ISMbKEIKCgo+IBskQiRHISIkKiQqJGAkTSQzJDMkXiRHJE41RE9AJEclKyVQ

15 messages 2010/05/11

[#41407] [Bug #3339] win32ole test failure — Usaku NAKAMURA <redmine@...>

Bug #3339: win32ole test failure

20 messages 2010/05/25
[#41411] Re: [Bug #3339] win32ole test failure — Masaki Suketa <masaki.suketa@...> 2010/05/25

助田です。

[#41412] Re: [Bug #3339] win32ole test failure — "U.Nakamura" <usa@...> 2010/05/25

こんにちは、なかむら(う)です。

[ruby-dev:41223] 正規表現オブジェクト中のキャプチャの数

From: "KISHIMOTO, Makoto" <[email protected]>
Date: 2010-05-08 06:51:32 UTC
List: ruby-dev #41223
きしもとです

正規表現オブジェクトからキャプチャの数を返すメソッドが欲しいです。
(鬼車には onig_number_of_captures という関数でそういう API があります)

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);

どういう風に使うか、ですが、以下のようなメソッドで防御的コーディングのために
使います。

class String

def gsub_multi ptns, alts
    res = []
    ptns.each{|ptn|
          # ※ここでチェックしたい
        re = Regexp.compile "(#{ptn.to_s})"
        res << re
    }
    uptn = Regexp.union *res
    gsub(uptn){
        idx = $~.captures.index{|x|x}
        alts[idx]
    }
end

end

以下のように使うメソッドです。

"でてこいいけのこい".gsub_multi([/こい/, /いけ/], ["いけ", "こい"])
=> "でていけこいのいけ"
(gsub の繰り返しではうまくありません)

ここで、ptnsで与えられた正規表現中にキャプチャーがあると、インデックスが
ずれてうまくありません。なので、正規表現中にキャプチャがないことを
(いくつあるか、という情報はこの目的には過剰ですが)確認したい、
というわけです。

In This Thread

Prev Next