我知道這個問題已經被問過。我確實檢查了以前的所有答案,但仍無法解決我的問題。請原諒我顯然重複的問題。在Perl中匹配中文字符
我正在寫一個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);
}
非常感謝您的幫助和建議!
/(\p{Han}+)/u
這實際上確實產生正確的輸出,但是,有很多像這樣的線路:在test.pl第13行打印 寬字符,線4 –
querystack
通過增加固定它: binmode STDOUT,「:UTF8」; 非常感謝!整個事情現在起作用! – querystack