[#8166] jcode.rb for UTF-8 — WATANABE Hirofumi <Hirofumi.Watanabe@...>
わたなべです.
[#8168] {literal}#[]= — EGUCHI Osamu <eguchi@...>
えぐち@エスアンドイーです。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
In message "[ruby-dev:8189] Re: {literal}#[]="
[#8175] yacc generated symbols — Masaki Fukushima <fukusima@...>
福嶋です。
[#8176] Multiple self assignment — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
まつもと ゆきひろです
もりきゅうです。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
もりきゅうです。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
In message "[ruby-dev:8266] Re: 例外を処理する 2 項演算子"
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
[#8204] Re: [ruby-list:18281] Re: アクセス制御について — Shugo Maeda <shugo@...>
前田です。
原です。
前田です。
けいじゅ@日本ラショナルソフトウェアです.
前田です。
[#8218] append_features — gotoken@... (GOTO Kentaro)
ごとけんです
[#8234] Syntax check in test.rb — Katsuyuki Komatsu <komatsu@...>
小松です。
[#8259] Re: [ruby-list:18468] Re: Array doesn't include Comparable — ttate@...
立石です。
[#8290] [patch] autoupdate — EGUCHI Osamu <eguchi@...>
えぐち@エスアンドイーです。
まつもと ゆきひろです
[#8305] [patch] duplicated include in regex.c — Minero Aoki <aamine@...>
あおきです。
[#8315] Re: [ruby-list:18601] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Kazunori NISHI <kazunori@...>
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
新井です。
まつもと ゆきひろです
新井です。
新井です。
まつもと ゆきひろです
小松です。
まつもと ゆきひろです
ごとけんです
なかだです。
[#8319] Re: Exception handling — Jun Adachi <adachi@...>
安達@沖データと申します。
西@九大です。
けいじゅ@日本ラショナルソフトウェアです.
[#8320] constants definition in extarnal files — nagai@...
永井@知能.九工大です.
In message "[ruby-dev:8320] constants definition in extarnal files"
[#8325] rdtool-0.5.2 and racc-0.9.5/racc-0.10.0 — Katsuyuki Komatsu <komatsu@...>
小松です。
[#8330] Re: Exception handling — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#8332] Re: Exception handling — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#8353] Regexp <=> — Kazuhiro Nishiyama <nishiyama@...1.tiki.ne.jp>
こんばんは、ZnZです。
まつもと ゆきひろです
こんばんは、ZnZです。
まつもと ゆきひろです
[#8366] Re: Exception handling — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#8375] File test methods for Stat — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#8445] [PATCH] Ruby/Tk and ... — Koji Arai <JCA02266@...>
新井です。
新井です。
永井@知能.九工大です.
[#8446] [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...>
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
これつぐです。
まつもと ゆきひろです
[#8451] new Hash (Re: [ruby-list:19043]) — Wakou Aoyama <wakou@...>
青山です。
原です。
松で
青山です。
[ruby-dev:8311] Re: [ruby-list:18316] Re: [book] csv_split2
これつぐです。
少し前の話ですが。
[ruby-list:18316] Re: [book] csv_split2
> まつもと ゆきひろです
> というか、String#scanとm//gの挙動の違いが原因のようです。
> scanの方は空パターンにマッチすると、無限ループになることを避
> けるために、1文字分ポインタを移動させます。ですから、次のマッ
> チは先頭からではなく、「"z"」の先頭に対して行われ、結果とし
> て(マッチしない)"z"の部分は無視されます。
>
> ところがPerlの方ではどういうわけかポインタは進まず、より長い
> マッチが選択されるようです。この動作原理は良く分かりませんが、
> このルールが明確にできればRubyの方でも合わせることはできると
> 思います。どういうルールなんだろう? m//gが正規表現と一体化
> しているがゆえにできることなんだろうか?
まつもとさんもすでに見たと思いますが、
perlre によると zero-length match のあとの zero-length match を禁止し、
その代わりに( zero-length でない) the second best match が使われるようです。
--- perlre
The higher level-loops preserve an additional state
between iterations: whether the last match was zero-
length. To break the loop, the following match after a
zero-length match is prohibited to have a length of zero.
This prohibition interacts with backtracking (see the
section on "Backtracking"), and so the second best match
is chosen if the best match is of zero length.
For example:
$_ = 'bar';
s/\w??/<$&>/g;
results in `"<><b><><a><><r><>"'. At each position of the
string the best match given by non-greedy `??' is the
zero-length match, and the second best match is what is
matched by `\w'. Thus zero-length matches alternate with
one-character-long matches.
---
確認のために上記の例を Ruby と Perl でやってみました。
(あえて Perl 風に書いています)
$ perl -le '$_ = "bar"; s/\w??/<$&>/g; print'
<><b><><a><><r><>
$ ruby -le '$_ = "bar"; gsub(/\w??/,"<\\&>"); print'
<>b<>a<>r<>
で、
肝心の動作原理については、
私は C が読めない人なのではっきりとはわかりませんが、
ここが怪しいのではないかと思います。
--- regexec.c
STATIC I32 /* 0 failure, 1 success */
S_regmatch(pTHX_ regnode *prog)
-- 中略
case END:
-- 中略
if (locinput < PL_regtill) {
DEBUG_r(PerlIO_printf(Perl_debug_log,
"%sMatch possible, but length=%ld is smaller than requested=%ld, failing!%s\n",
PL_colors[4],
(long)(locinput - PL_reg_starttry),
(long)(PL_regtill - PL_reg_starttry),
PL_colors[5]));
sayNO_FINAL; /* Cannot match: too short. */
}
---
これを私は
「match に成功しても上記条件のときには失敗と扱う」
と理解しましたが……?