Snippets

sironekotoro 漢数字をアラビア数字にする(Perl入学式でやっていないところ)

Created by sironekotoro

File kansuuji_to_arabic_number__sironektoro.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) {
+
+    # tr演算子を利用して置換
+    # 十については置換していない
+    $arabic_number =~ tr/〇一二三四五六七八九/0123456789/;
+
+    # 十 が入る位置パターンで置換
+
+    # 十 が先頭 かつ その後に何の文字もない場合は 10 に置換
+    $arabic_number =~ s/^十$/10/;
+
+    # 肯定的先読み(?=pattern)
+    # 先頭に 十 があり、十 の後に文字が続く場合に 十を置換
+    $arabic_number =~ s/(^十)(?=.+$)/1/;
+
+    # 十 が他のアラビア数字に挟まれている場合、 十 を削除
+    # 肯定的後読み(?<=pattern)
+    # 肯定的先読み(?=pattern)
+    $arabic_number =~ s/(?<=\d)十(?=\d)//;
+
+    # 末尾に 十 がある場合には 0 に置換
+    $arabic_number =~ s/十$/0/;
+
+    print encode_utf8($arabic_number) . "\n";
+
+}
+
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.