如何在非ASCII字符串中使用正则表达式?

时间:2013-02-12 22:46:48

标签: regex perl unicode

我有这段代码:

opendir(DIR, ".");
while (readdir DIR) {
  print $1, "\n" if $_ =~ /(\w+)/i;
}

当然只获得ASCII字符串。如何使用regexp在输出中获取另一个非ASCII字符串?

UPD

例如,如果在“。”目录有两个文件fileдругойфайл。因此,当我运行此脚本时,我只在输出中获得file但我想获得另一个非英文名称другойфайл

的文件

1 个答案:

答案 0 :(得分:2)

以下代码似乎有效:

use warnings;
use strict;
use Encode qw(decode);

my $dir = $ARGV[0] || '.';
opendir my $dh, $dir  or die "$0: $dir: $!\n";
while (readdir $dh) {
    $_ = decode 'UTF-8', $_;
    print $1, "\n" if /(\w+)/;
}

这假设您的文件系统当然以UTF-8存储名称。

输出:

file
другойфайл