2013-02-12 93 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

相關問題