post by yamamoto | 0 | 1,058 views

perl tips 文字列に英文以外の文字を取り出す

#!/usr/bin/perl

use strict;

use Encode;

my $content = "阴阳学说 yin-yang theory 中国古代哲学理论范畴。阴阳的对立统一是天地万物运动变化的根本规律。";
print "$content\n";

my $notlatin = GetNotLatin($content);
print $notlatin,"\n" ;

sub GetNotLatin {
my $string =shift;
$string.=" ";

my @alph_list = ('A' .. 'Z', 'a' .. 'z','\'','.','(',')','-' );
my @string = ();
my @word = ();
foreach my $character (split //, $string) {
if ( grep {$_ eq $character} @alph_list ){
push(@string, $character);
} else {
    if ($#string>0){
        push(@word, join(/null/,@string));
        @string = ();
    }
}}

    foreach my $word (@word) {
        $string = ReplaceAll($string,$word);
        print "$string\n";
    }
    return $string;
}

# ~s///g を使うと、結果が数字ばかりになるので、置換えの関数を作った^^;

sub ReplaceAll {
    my $string = Encode::decode_utf8(shift);
    my $str1 = Encode::decode_utf8(shift);
    my $str2 = Encode::decode_utf8(shift);

    for (my $i=0 ; $i <= length($string); $i+=length($str1)){
        my $pos=index($string, $str1, $i) ;
        if ( $pos>=0){
            substr($string, $pos, length($str1),$str2);
            $i = 0;
        } else {
            last;
        }
    }
    return Encode::encode_utf8($string);
}

【実行結果】

阴阳学说 yin-yang theory 中国古代哲学理论范畴。阴阳的对立统一是天地万物运动变化的根本规律。
阴阳学说   中国古代哲学理论范畴。阴阳的对立统一是天地万物运动变化的根本规律。

 

 

Comments are closed.