2013-02-12 37 views
-1

我有这样的代码:如何在非ASCII字符串中使用正则表达式?

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

它当然是唯一的ASCII字符串。如何使用regexp在输出中获得另一个非ASCII字符串?

UPD

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

+0

当然,什么?为什么它只能得到ASCII字符串? – bmargulies 2013-02-12 22:49:41

+0

'\ w +'是字母数字字符。你可以用'\ W +'来取消字符类。 – TLP 2013-02-12 22:54:42

+0

那么我想解析的不仅仅是英文文件的名称。我在UPD中写过关于它的内容。 – edem 2013-02-12 23:08:36

回答

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 
другойфайл 
+0

它的工作。谢谢。 '使用编码('utf8');'是需要添加到文件以避免这些消息'宽字符打印在'。 – edem 2013-02-12 23:55:46

+1

请勿使用“编码”。使用'use open':std',':utf8';' – ikegami 2013-02-13 00:20:57

相关问题