Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MHonArc 2.6.3 のバグ(?)について



At Wed, 03 Sep 2003 04:18:38 +0900,
Tadamasa Teranishi wrote:
> > > <VARREGEX>
> > > \$\$|\$([A-Za-z]+[A-Za-z_]+(?:\:(?:\d+|[UJ]))?(?:\([^\$\(\)]*\))?)\$
> > > </VARREGEX>
> > 
> > 「い」を含めると ISO-2022-JP で「$$」が出現してしまうため、
> > 「$$」が「$」に変換されてしまうため、文字化けしてしまいました。
> ...
> > 0x24 が「$」です。困ったなぁ…。なにかよい解決方法ありますかね?
> 
> えっと。実はこの問題を把握していて、対処方法としてとりあえず
> 次のものが良いのではないかということになっています。
> 
> <VARREGEX>
> (?<!\033)\$([^\033\$]*)\$
> </VARREGEX>
> 
> まだ、いろいろと検証ができていないので、検証ができてから公開しようか
> と思っていました。

これだと「$」の直前に ESC (033) がない場合にしかマッチしないので、
ISO-2022-JP に含まれる「\$([^\x033\$])\$」の直前には ESC がないので
マッチしてしまいます。

$ echo い | nkf -j| od -to1
0000000 033 044 102 044 044 033 050 102 012
0000011
$ echo い |nkf -j|perl -pe 's/(?<!\033)\$([^\033\$]*)\$/$1/e' |od -to1
0000000 033 044 102 033 050 102 012
0000007

このように、「い」の「044 044」($$)の部分が置換されてしまいます。

<VARREGEX>
(?<!\033[^\033]*)\$([^\033\$]*)\$/$1/
</VARREGEX>

では、Perl は「Variable length lookbehind not implemented in regex ...」と
文句を言うので駄目です。perlre(1) に記述されているように
「Works only for fixed-width look-behind.」なので…。

とりいそぎ、「$$」は使わないことにして、

<VARREGEX>
\$([A-Za-z]+[A-Za-z_]+(?:\:(?:\d+|[UJ]))?(?:\([^\$\(\)]*\))?)\$
</VARREGEX>

にしようかと考えています。

-- 
-- Name: SATOH Fumiyasu  -- Home: http://www.sfo.jp (in Japanese only)
-- Mail: fumiya @net-thrust.com, @samba.gr.jp, @namazu.org or ...