Snippets

sironekotoro 漢数字をアラビア数字にする(正規表現利用)

Created by sironekotoro

File kansuuji_to_arabic_number__regex.pl Added

  • Ignore whitespace
  • Hide word diff
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+# 今回のように、スクリプト内に直接マルチバイト文字(日本語の全角文字など)を
+# 使う場合には use utf8; する
+use utf8;
+
+# スクリプト内に書かれたマルチバイト文字(日本語の全角文字など)を標準出力する
+# 場合には Encode モジュールを使う。
+use Encode qw/encode_utf8/;
+
+# 0〜99までの数字を漢数字を受け取ってアラビア数字にする
+
+# 与えられる文字列
+my @array = (
+    '一',    '二',       '十',       '十一',
+    '三四', '二十一', '三十四', '三十',
+    '三〇'
+);
+
+for my $arabic_number (@array) {
+
+    # 漢数字を数字に置き換える
+    # 置換できなかったものは無視される
+    $arabic_number =~ s/〇/0/;
+    $arabic_number =~ s/一/1/;
+    $arabic_number =~ s/二/2/;
+    $arabic_number =~ s/三/3/;
+    $arabic_number =~ s/四/4/;
+    $arabic_number =~ s/五/5/;
+    $arabic_number =~ s/六/6/;
+    $arabic_number =~ s/七/7/;
+    $arabic_number =~ s/八/8/;
+    $arabic_number =~ s/九/9/;
+    $arabic_number =~ s/十/10/;
+
+# 上記の置換でアラビア数字が2桁以下になるものであれば、
+# この時点で置換は完成している
+# 一 => 1
+# 二 => 2
+# 十 => 10
+# 三四 => 34
+# 三〇 => 30
+
+# アラビア数字が3桁以上のものには、さらに置換で対応する
+# 10が先頭にあるか、それ以外かでグループ分けできそう
+# 十一 => 101    正解は 11
+# 二十一 => 2101 正解は 21
+# 三十四 => 3104 正解は 34
+# 三十 => 310    正解は 30
+
+    if ( $arabic_number > 100 ) {
+
+        # 先頭に10がある時はそれを1に置換する
+        $arabic_number =~ s/^10/1/;
+        # それ以外の10は置換を使って削除する
+        $arabic_number =~ s/10//;
+
+    }
+
+    print encode_utf8($arabic_number) . "\n";
+
+}
+