Snippets

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

Created by sironekotoro
#!/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";

}

Comments (0)