匹配Perl中的汉字

时间:2013-06-23 05:41:15

标签: regex perl utf-8

我知道之前已经问过这个问题。我确实检查了以前的所有答案,但仍然无法解决我的问题。请原谅我这个明显重复的问题。

我正在编写一个用中文处理文本文件的perl程序。我想识别中文文本但排除所有其他行,如英语或其他语言和网址。我使用“use utf8”和“$line =~ /(\p{Han}+)/”,但它什么也没做。如果我使用“use utf8”和“$line =~ /信息/”,则不会执行任何操作。如果我不使用“use utf8”,则“$line =~ /信息/”可以有效但不能“$line =~ /(\p{Han}+)/”。我检查文本文件编码:file -bi input.txt,它显示:“text/plain; charset=utf-8”。以下是代码:

$|=1;
use strict;
use utf8;

my $in = $ARGV[0];

sub main {

    open(IN, "$in") or die "can't open $in\n";

    while (my $line=<IN>) {
        chomp($line);

        if ($line =~ /(\p{Han}+)/ ) { 
        print "chinese: $line\n";
        }

        if ($line =~ /信息/) {
           print "$line\n";
        }

    } # end while

   close(IN); 
}

提前感谢您的任何帮助和建议!

2 个答案:

答案 0 :(得分:7)

您需要将文件打开为UTF-8:

open IN, "<:encoding(UTF-8)", $in or die "can't open $in\n";

否则它被读作字节串,这不是你想要的。

答案 1 :(得分:-3)

如果您希望正则表达式引擎将字符串视为unicode字符串,则必须使用u修饰符:

/(\p{Han}+)/u