![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
言語: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以上だとできる)のでこの策もだめで、困り果てています。どなたかよい方法を教えてください。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
その正規表現による方法は、参考URLの「Perlメモ:正しくパターンマッチさせる」で紹介されているものですが、そこにはPerl5.005より前の環境でも利用可能な方法も載っていますので、そちらを参考にされるとよいでしょう。
参考URL:http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
ご回答ありがとうございます。
試みたのですが、不可解な現象にぶちあたりました。
【正常に動作】
$ascii = "[\x00-\x7F]";
$twoBytes = "[\x8E\xA1-\xFE][\xA1-\xFE]";
$threeBytes = "\x8F[\xA1-\xFE][\xA1-\xFE]";
$pattern = "(2)";
$replace = "II";
$str =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1$replace/g;
$pattern = "(3)";
$replace = "III";
$str =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1$replace/g;
$pattern = "(4)";
$replace = "IV";
$str =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1$replace/g;
$pattern = "(5)";
$replace = "V";
$str =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1$replace/g;
【Internal Errorとなってしまう】
$ascii = "[\x00-\x7F]";
$twoBytes = "[\x8E\xA1-\xFE][\xA1-\xFE]";
$threeBytes = "\x8F[\xA1-\xFE][\xA1-\xFE]";
$pattern = "(1)";
$replace = "I";
$str =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1$replace/g;
$pattern = "(2)";
$replace = "II";
$str =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1$replace/g;
$pattern = "(3)";
$replace = "III";
$str =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1$replace/g;
$pattern = "(4)";
$replace = "IV";
$str =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1$replace/g;
$pattern = "(5)";
$replace = "V";
$str =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1$replace/g;
ローマ数字の(1)を変換しようとするとエラーになってしまうのですが、なぜでしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C# 浮動小数の数値文字列化 1 2022/04/18 15:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- 計算機科学 ディジタル信号の問題がわかりません 1 2022/05/11 21:12
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- 高校 高2数Bの質問です。 ベクトル PB+DS-PS-XB=DX を証明する問題です。 →は省略させて頂 2 2022/05/15 01:03
- Visual Basic(VBA) VBA ユーザーフォームからSubプロージャ―に値を引き渡す方法 3 2023/04/09 01:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでPDFファイルをMicro...
-
VBScript 全角英数記号→半角英...
-
CString から LPCTSTRの型に変換
-
DAC ICについて
-
tkinter widget ことえり変換で...
-
五十音の並べ替えsortを教えて...
-
URLが日本語なのになぜ表示...
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
全角入力
-
正規表現の否定先読みで、複数...
-
IMAP4でsubjectが検索ヒットしない
-
住宅にカナを入力する際に丁目...
-
全角英数字の必要性が理解できない
-
openoffice calcで#DIV/0! の...
-
[VBA][Excel]クリップボードか...
-
全角/半角キーをSendkeys関数で...
-
何故、日本は未だに数字を3桁...
-
VBA EXCEL あるセルの中の一...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでPDFファイルをMicro...
-
文字コードの%E3%80%とは何です...
-
CString から LPCTSTRの型に変換
-
VB6にも「ToString」ってあり...
-
gccでiconvを使った文字コード...
-
VBScript文字列をSJISからUTF8...
-
SJIS->UTF8->SJISコード変換に...
-
ローマ字からカナに変換する方...
-
シャープ(#)の受け渡し
-
文字列を quoted-printable 文...
-
Encode.pmで「髙」(ハシゴ高)...
-
LINUX上でシリアル通信(C++)
-
ローマ数字の変換をしたいのですが
-
Kシェルでの文字型→数値型変換
-
テキストをhtml変換するには
-
ひらがなから全角カタカナへの...
-
Delphiの型変換
-
SQLのデータで半角カナを全角に...
-
CString型からdouble型への変換
-
五十音の並べ替えsortを教えて...
おすすめ情報