作者: Bunta
日時: 2006/10/26(01:37)
Bruce.さん

>>  意味のない例ですが、look-behindもいけますね。(^^)v
>
>perlのlook-behindはその仕様上固定長である必要があります
>(ぢつは抜け道がないわけでもない)。したがって、ShiftJISの
>ようなマルチバイト文字エンコーディングの場合、たとえば
>'.' が表す一文字が1バイトである可能性も2バイトである可能性
>もともにあります。このため、latin-1(通常のPerlが使用するで
>あろうと仮定されているエンコーディング)とは異なり、'.'が
>可変長になってしまうのでlook-behindで使うことができません。

 うーん、め、明晰。明晰すぎるほど明晰です。よく分かりました。
m(__)m

>文太さんの例でうまく行ったように見えたのは、単にバイト列
>として戻り読みをしても問題がなかったからです。

 了解です。

>たとえば (?<=@)\d+ という正規表現があったとき、
>@が先行する数字列にマッチすることが期待されますが、
>ShiftJISの場合2バイト目に@と同じ文字コード(0x40)を
>含む文字が存在します。これらの文字に対してもバイト列
>として眺めてしまうのでマッチが成功してしまう可能性が
>あります。

 引用ばかりのレスで申し訳ありません。でもどこも切れない。

 とてもよく分かりました。できたら応用的に理解したいとは思うのですが、文
字コードが体系的に頭に浮かびません。それでも、2バイトばっかりの文章相手
なら大丈夫なのかなと思っています。

 jperlでlook-behindができるとは思うな、とは覚えておきます。m(_B_)m

文太