[スレッド全体]

[22] Re2:全角文字対応substr(S-JIS専用) 
2001/7/4 (Wed) 09:43:06 - あけび
改良版。

sub z_substr {
local($s,$p,$l,$o) = @_;
$s =~ s/(.)/$1\0/g;
$s =~ s/([\x81-\x9f\xe0-\xfc])\0(.)\0/$1$2\0\0/g;
$s = $l eq '' ? substr($s,$p*2):substr($s,$p*2,$l*2);
if ($o) { $s =~ s/^\0\0/ /; $s =~ s/.[^\0]$/ /;}
$s =~ tr/\0//d;
$s;
}

第4引数に1を与えた場合には、切り出した結果の文字列の
先頭が2バイト文字の2バイト目にあたる場合と
終端が2バイト文字の1バイト目にあたる場合には、
それぞれを半角スペースに置き換えて
返される文字長の辻褄合わせを行うようにしました。
第4引数を与えなかった場合はこれまでと同じです。

#example.
print &z_substr('全角文字',1,6,1);

[▼次のスレッド]
INCM/CMT
Cyclamen v3.84.01