为什么Perl正则表达式中的"\w"不能匹配Unicode单词字符(例如,"ğ,İ,ş,ç,ö,ü")?
我尝试在正则表达式
如何解决这个问题?
在代码中,我试图读取文件并将数组中的每个字符串取出。(分隔符可以是
我尝试在正则表达式
m{\w+}g
中包含这些字符。但是,它无法匹配"ğ,İ,ş,ç,ö,ü"。如何解决这个问题?
use strict;
use warnings;
use v5.12;
use utf8;
open(MYINPUTFILE, "< $ARGV[0]");
my @strings;
my $delimiter;
my $extensions;
my $id;
while(<MYINPUTFILE>)
{
my($line) = $_;
chomp($line);
print $line."\n";
unshift(@strings,$line =~ /\w+/g);
$delimiter = /[._\s]/;
$extensions = /pdf$|doc$|docx$/;
$id = /^200|^201/;
}
foreach(@strings){
print $_."\n";
}
输入文件格式如下:
Çidem_Şener
Hüsnü Tağlip
...
输出文件格式如下:
H�
sn�
Ta�
lip
�
idem_�
ener
在代码中,我试图读取文件并将数组中的每个字符串取出。(分隔符可以是
_
或.
或\s
)。
open MYINPUTFILE, '<:encoding(UTF-8)', $ARGV[0] ...
。否则,你的输入是原始的(八位字节序列),而不是按照你的期望进行解释的。 - mobuse open qw(:std :utf8); use warnings qw(FATAL utf8);
,一切应该会好得多。请参见 The Perl Unicode Cookbook。 - tchrist