ローマ数字の変換をしたいのですが
言語:perl5.00404
機種依存文字である、ローマ数字を変換したいのですが、
例:ローマ数字の1~10を、I,II,III,IV,V,・・・と変換したい。
試みた方法としては、
&jcode::tr(\$str, "\xAD\xB5", "I");
&jcode::tr(\$str, "\xAD\xB6", "II");
&jcode::tr(\$str, "\xAD\xB7", "III");
&jcode::tr(\$str, "\xAD\xB8", "IV");
&jcode::tr(\$str, "\xAD\xB9", "V");
jcodeを使用して変換。
この方法だと、ローマ数字の1~3は、全て"I"としか
変換してくれず困っています。
(1文字目しか変換されないようなのです。)
これではいけないと考え、正規表現で以下のように試みたのですが、
$eucpre = qr{(?<!\x8F)};
$eucpost = qr{
(?=
(?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
(?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端
)
}x;
$str =~ s/$eucpre(?:\xAD\xB5)$eucpost/$1I/g;
$str =~ s/$eucpre\Q\xAD\xB5\E$eucpost/$1I/g;
$str =~ s/$eucpre(?:\xAD\xB6)$eucpost/$1II/g;
$str =~ s/$eucpre\Q\xAD\xB6\E$eucpost/$1II/g;
$str =~ s/$eucpre(?:\xAD\xB7)$eucpost/$1III/g;
$str =~ s/$eucpre\Q\xAD\xB7\E$eucpost/$1III/g;
$str =~ s/$eucpre(?:\xAD\xB8)$eucpost/$1IV/g;
$str =~ s/$eucpre\Q\xAD\xB8\E$eucpost/$1IV/g;
$str =~ s/$eucpre(?:\xAD\xB9)$eucpost/$1V/g;
$str =~ s/$eucpre\Q\xAD\xB9\E$eucpost/$1V/g;
これだとperlのバージョンが対応していない(perl5.005以上だとできる)のでこの策もだめで、困り果てています。どなたかよい方法を教えてください。
お礼
いろいろ調べても分からなかったのに、やはりインターネットの力はすごい!と改めて思い知らされました。時代によってローマ数字の書き方が違ったということは知らなかったので驚きました。新たな発見ができてうれしいです。本当にありがとうございました。