[#31178] in という演算子は? — "たけ(tk)" <ggb03124@...>
in という演算子はないのでしょうか?。
In <20010901205605.B2CB.GGB03124@nifty.ne.jp>
[#31191] クラスメソッドについて — cyross@...
みなさん、初めまして。
まつもと ゆきひろです
サイロスです。
まつもと ゆきひろです
[#31198] Re: [ruby-talk:20696] Re: CORBA Ruby mapping — Daisuke KANDA <MAP2303@...>
[#31205] メソッドの再定義で super は使えますか? — Take_tk <ggb03124@...>
いままで
[#31227] CGI でファイルアップロード — Kamakura Sadanori <kamakura@...>
鎌倉と申します。教えてください。
[#31234] oracle: sub query — Yasushi Shoji <yashi@...>
やすしです。
At Tue, 4 Sep 2001 19:59:11 +0900,
At Wed, 5 Sep 2001 11:46:41 +0900,
[#31238] 半角から全角へ変換 — 吉川 正晃 <yosikawa@...>
吉川と申します。こちらには初めての投稿になります。
わたなべです。
たけ(tk)です。
わたなべです。
あづみです。
たけ(tk)です。
たけ(tk)です。
[#31280] 掲示板の再読み込み時の問題 — みかみまさと <kofu@...>
こんにちは。いつもお世話になっています、みかみと申します。
[#31283] ruby 1.6.5 preview1 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#31294] blade ruby-list thread 表示ストップ — Noritsugu Nakamura <nnakamur@...>
[#31303] net/telnet でホストに接続できない — Satoru Sakashita <sakasita@...>
坂下です。
[#31339] Toshihiko Inoue/mazak は不在にしております。 — Toshihiko_Inoue@...
2001/09/09 から 2001/09/30の間、不在にしております。
[#31369] Ruby 開発環境 RDE0.9.2.0 公開 — 斉藤和樹 <QZS01353@...>
こんにちは。斉藤です。
[#31377] 添付ライブラリのリファレンス (HTML) — "Sadayuki Sakamoto" <flea@...8.dion.ne.jp>
酒本と申します。
吉川です。
酒本です。
新井です。
[#31387] Win32OLE 拡張の試み — arton <arton@...>
artonです。
[#31406] RD format — "K.Kosako" <kosako@...>
RDの仕様について質問ですが、埋め込み用途ではなく、
Toshです。
[#31414] ruby 1.6.5 preview — m_seki@...
なかだです。
なかだです。
なかだです。
まつもと ゆきひろです
[#31419] Hash#+ ハッシュの足し算はいかが? — Take_tk <ggb03124@...>
class Hash
有馬です。
[#31441] 散財自慢 — keiichi matsunaga <ma2@...>
松永です。
[#31443] About Array#index — Takayasu HISANO/久野 孝泰 <taka@...>
はじめて投稿致します。
[#31463] お知恵を拝借 — cyross@...
サイロスです。
[#31486] entry ordering of RAA — Tanaka Akira <akr@...17n.org>
ふと、疑問に思ったのですが、RAA のエントリの順番はどのようにして決まっ
まつもと ゆきひろです
[#31496] Ruby/GTK latest version? — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
[#31499] はじめまして AWK から Ruby — Kusunoki Kaoru <kusunoki@...>
はじめまして。
まつもと ゆきひろです
[#31508] 全角を半角に変換 — yoshikazu tsubaki <y-tsubaki@...>
#2回目の人ごめんなさい(間違えて2つのMLに送信してしまいました)
わたなべです。
In <4518-Mon17Sep2001192412+0900-eban@os.rim.or.jp>
[#31533] ruby 1.6.5 — matz@... (Yukihiro Matsumoto)
Ruby 1.6.5 is released, check out:
[#31551] incorrect float behavior if an extension calls setlocale — akira yamada / やまだあきら <akira@...>
[#31568] net/pop — OHARA Shigeki <os@...>
大原です。
[#31576] eruby が core dump — Teruki Shigitani <shigi@...>
鴫谷と申します。
[#31577] csv-1.0.1 で最後のカラムが isNull = true に — Teruki Shigitani <shigi@...>
鴫谷と申します。
[#31579] eruby の charset について — Teruki Shigitani <shigi@...>
鴫谷と申します。度々ですみません。
[#31588] re:Volume Label の取得法について — bind <bind@...>
さいとうです。
[#31593] 配列の和,積の作り方 — Yamamoto Atsushi <yamamoto@...>
山本と申します.
[#31626] my LC2001 summary — Minero Aoki <aamine@...>
あおき@結局三日連続で飲んでしまった です。
まつもと ゆきひろです
助田です。
なかだです。
あおきです。
artonです。
あおきです。
あおきです。訂正。
高橋征義です。
まつもと ゆきひろです
高橋征義です。
もりきゅうです。
なかだです。
もりきゅうです。
もりきゅうです。
こんにちは、なかむら(う)です。
なかだです。
もりきゅうです。
はじめまして、Kita といいます。
もりきゅうです。
なかだです。
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
もりきゅうです。
もりきゅうです。
もりきゅうです。
もりきゅうです。
もりきゅうです。
もりきゅうです。
[#31634] Marshal するオブジェクトを変更したい — "Shin'ya Adzumi" <adzumi@...>
あづみです。
[#31647] Net::HTTP で post — Kazuhiro NISHIYAMA <zn@...>
cgi-lib.plを使ったcgiにpostできません。
In <20010930113651.A1122@jbtkbc103.jbt.co.jp>
あおきです。
[#31649] pilot .pdb — Masatoshi SEKI <m_seki@...>
[#31653] New project: let me see... — Kazuhiko <kazuhiko@...>
かずひこです。
こんにちは。kadu です。
かずひこです。
かずひこです。
nyasu@3web です。
[ruby-list:31216] Re: [REQ] String#slice(re, n)
あおきです。ruby-dev に移します。
In mail "[ruby-list:31213] Re: [REQ] String#slice(re, n)"
matz@ruby-lang.org (Yukihiro Matsumoto) wrote:
> まつもと ゆきひろです
> |> str.slice(re, n)はマッチしていない、あるいは対応するかっこが
> |> ないときにはnilを返すということ?
> そうなると(そうでなくてもsliceという名前なら)整合性のために、
> []や[]=やslice!も(re, n)というパターンに対応する必要がありま
> すね。大仕事だなあ。
実装してみようかと思ったんですが、その途中で、/a(b)c/ で b に
「マッチ」するような「サブパターンオブジェクト」があるといろいろな
面でうまくいくのではないかと思いつきました。つまり
str = 'abc'
re = /a(b)c/
n = 1
pat = re.sub_pattern(n) # または RegexpSubPattern.new(re,n)
p str.slice(pat) #=> "b"
p str.slice!(pat) #=> "ac"
p str[pat] #=> "b"
p str[pat] = 'REPLACE' #=> "aREPLACEc"
という感じです。C からも部分文字列取り出しを透過にしておけば、
string.c は全くいじらずに slice(!) [] []= sub(!) に対応できて
しまいます (意見ころころ変えてすみません〜)。
# ただ gsub は offset==BEG[0] を仮定してるらしいので直す必要あり
で、それを実装してみたのが添付のパッチです。re.c のレベルで
m[i] を m[i-n] に置きかえることで実現してます。struct RRegexp に
メンバを増やしてるのは試験実装ってことで許してください。
-------------------------------------------------------------------
青木峰郎
Index: ruby.h
===================================================================
RCS file: /src/ruby/ruby.h,v
retrieving revision 1.51
diff -u -r1.51 ruby.h
--- ruby.h 2001/07/19 02:46:28 1.51
+++ ruby.h 2001/09/03 12:21:37
@@ -287,6 +287,7 @@
struct re_pattern_buffer *ptr;
long len;
char *str;
+ int shift;
};
struct RHash {
Index: re.c
===================================================================
RCS file: /src/ruby/re.c,v
retrieving revision 1.44
diff -u -r1.44 re.c
--- re.c 2001/07/24 09:07:33 1.44
+++ re.c 2001/09/03 12:21:36
@@ -603,6 +603,9 @@
pos, range);
}
+static int reg_subpattern_n_get _((VALUE));
+static void match_shift_registers _((VALUE, int));
+
int
rb_reg_search(re, str, pos, reverse)
VALUE re, str;
@@ -655,6 +658,7 @@
match = match_alloc();
}
re_copy_registers(RMATCH(match)->regs, ®s);
+ match_shift_registers(match, reg_subpattern_n_get(re));
RMATCH(match)->str = rb_str_new4(str);
rb_backref_set(match);
@@ -815,6 +819,7 @@
}
VALUE rb_cRegexp;
+static void reg_subpattern_n_set _((VALUE, int));
static void
rb_reg_initialize(obj, s, len, options)
@@ -867,6 +872,7 @@
memcpy(re->str, s, len);
re->str[len] = '\0';
re->len = len;
+ reg_subpattern_n_set((VALUE)re, 0);
if (options & ~0xf) {
kcode_reset_option();
}
@@ -1353,6 +1359,55 @@
return match_getter();
}
+VALUE rb_cRegexpSubPattern;
+
+static void
+reg_subpattern_n_set(re, nth)
+ VALUE re;
+ int nth;
+{
+ RREGEXP(re)->shift = nth;
+}
+
+static int
+reg_subpattern_n_get(re)
+ VALUE re;
+{
+ return RREGEXP(re)->shift;
+}
+
+static VALUE
+rb_reg_sub_pattern(re, nth)
+ VALUE re, nth;
+{
+ VALUE obj;
+
+ obj = rb_reg_clone(re);
+ RREGEXP(obj)->basic.klass = rb_cRegexpSubPattern;
+ reg_subpattern_n_set(obj, NUM2INT(nth));
+ return obj;
+}
+
+static void
+match_shift_registers(match, n)
+ VALUE match;
+ int n;
+{
+ int i;
+ int len = RMATCH(match)->regs->num_regs;
+
+ if (n > len) n = len;
+ for (i = 0; i < len - n; i++) {
+ RMATCH(match)->regs->beg[i] = RMATCH(match)->regs->beg[i+n];
+ RMATCH(match)->regs->end[i] = RMATCH(match)->regs->end[i+n];
+ }
+ for (i = len - n; i < len; i++) {
+ RMATCH(match)->regs->beg[i] = -1;
+ RMATCH(match)->regs->end[i] = -1;
+ }
+ RMATCH(match)->regs->num_regs -= n;
+}
+
void
Init_Regexp()
{
@@ -1408,6 +1463,9 @@
rb_define_const(rb_cRegexp, "MULTILINE", INT2FIX(RE_OPTION_MULTILINE));
rb_global_variable(®_cache);
+
+ rb_cRegexpSubPattern = rb_define_class("RegexpSubPattern", rb_cRegexp);
+ rb_define_method(rb_cRegexp, "sub_pattern", rb_reg_sub_pattern, 1);
rb_cMatch = rb_define_class("MatchData", rb_cObject);
rb_define_global_const("MatchingData", rb_cMatch);