[#10793] 今度こそ (patch of the ruby-1.4.6 for NT4.0&VC4.0 on DEC Alpha.) — kou@...1609.sip.eee.yamaguchi-u.ac.jp (Koichi Okada)

岡田です。

10 messages 2000/09/01

[#10920] SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

17 messages 2000/09/14
[#11077] Re: SIGINT on windows — matz@... (Yukihiro Matsumoto) 2000/09/27

まつもと ゆきひろです

[#10944] dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

19 messages 2000/09/18
[#10955] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10963] Re: dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/09/19

なかだです。

[#10964] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10978] [PATCH] require in require — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

15 messages 2000/09/20

[#10985] httphead.rb proxy version problem — Katsuyuki Komatsu <komatsu@...>

小松です.

16 messages 2000/09/20
[#10989] Re: httphead.rb proxy version problem — Minero Aoki <aamine@...> 2000/09/20

あおきです。

[ruby-dev:10861] MatchingData#last_group

From: Shugo Maeda <shugo@...>
Date: 2000-09-07 14:52:07 UTC
List: ruby-dev #10861
前田です。

昼間ぼそって話しましたが、以下のように$+に対応する番号を返すメソッ
ドがMatchingDataにあると、

SYMBOL_TABLE = []
SYMBOL_TABLE[1] = :NUMBER
SYMBOL_TABLE[2] = :IDENTIFIER
SYMBOL_TABLE[3] = :EQUAL
SYMBOL_TABLE[4] = :PLUS
SYMBOL_TABLE[5] = :MINUS

while line = gets
  while m = /(\d+)|([a-zA-Z][a-zA-Z0-9]*)|(=)|(\+)|(-)/.match(line)
    p SYMBOL_TABLE[m.last_group]
    line = $'
  end
end

みたいなのが、さくっと書けてうれしいのですがいかがでしょうか。

とりあえず、パッチです。

--- re.c	2000/09/01 09:18:11	1.32
+++ re.c	2000/09/07 14:49:10
@@ -799,6 +799,20 @@
     return RMATCH(match)->str;	/* str is frozen */
 }
 
+static VALUE
+match_last_group(match)
+    VALUE match;
+{
+    int i;
+
+    if (RMATCH(match)->BEG(0) == -1) return Qnil;
+
+    for (i=RMATCH(match)->regs->num_regs-1; RMATCH(match)->BEG(i) == -1 && i > 0; i--)
+	;
+    if (i == 0) return Qnil;
+    return INT2FIX(i);
+}
+
 VALUE rb_cRegexp;
 
 static void
@@ -1382,5 +1396,6 @@
     rb_define_method(rb_cMatch, "post_match", rb_reg_match_post, 0);
     rb_define_method(rb_cMatch, "to_s", match_to_s, 0);
     rb_define_method(rb_cMatch, "string", match_string, 0);
+    rb_define_method(rb_cMatch, "last_group", match_last_group, 0);
     rb_define_method(rb_cMatch, "inspect", rb_any_to_s, 0);
 }

-- 
前田 修吾

In This Thread

Prev Next