2009-05-01 13 views
3

私は正規表現したいウェブサイト、例えばhttp://www.ru.wikipedia.org/wiki/perlを持っています。サイトはロシア語であり、私はロシアのすべての言葉を抜きたい。 \w+との一致は機能せず、\p{L}+との一致はすべてを取得します。Perlを使ってロシア語のUnicodeテキストをどのように一致させるのですか?

どうすればよいですか?

+0

これはまさにUnicodeプロパティのためのものです。 \ p {キリル文字}を使用します。 –

答えて

3
perl -MLWP::Simple -e 'getprint "http://ru.wikipedia.org/wiki/Perl"' 
403 Forbidden <URL:http://ru.wikipedia.org/wiki/Perl> 

これは役に立ちません。最初のコピーをダウンロード

、これは動作しているようです:

use Encode; 

local $/ = undef; 
my $text = decode_utf8(<>); 

my @words = ($text =~ /([\x{0400}-\x{04ff}]+)/gs); 

foreach my $word (@words) { 
    print encode_utf8($word) . "\n"; 
} 
+1

WikipediaはLWP :: Simpleリクエストをブロックするようです。ユーザーエージェントの文字列を変更するとうまくいくかもしれません。 –

+0

あなたはロシアの言葉では '\ x {0401} - \ x {042f}'を意味すると思います。文字を過度に一致させる必要はありません。ユニコードテーブルを確認する[ここ](http://www.wikiwand.com/en/Russian_alphabet) –

0

さて、これを試してみてください。

#!/usr/bin/perl 

use strict; 
use warnings; 
use LWP::UserAgent; 

my $ua = LWP::UserAgent->new; 

my $response = $ua->get("http://ru.wikipedia.org/wiki/Perl"); 

die $response->status_line unless $response->is_success; 

my $content = $response->decoded_content; 

my @russian = $content =~ /\s([\x{0400}-\x{052F}]+)\s/g; 

print map { "$_\n" } @russian; 

私はキリル文字セットが0x0400から始まり、キリルサプリメント・キャラクタ・セットが0x052Fで終了するので、これは言葉の多くを取得する必要があると考えています。

+0

throwswに警告:「一致したUTF-8文字(開始バイト0xbfの後に0x4043e433、0xd1バイトでオーバーフロー)がretrieveFromWiki.pl行45でパターンマッチ(m //)英語の用語を含むすべてを取得します(英語の文字) –

3

これらすべての答えはovercomplicatedです。この

$text =~/\p{cyrillic}/

BAMを使用してください。

-1

このままにしてください。 特定のロシア語の単語に一致する

use utf8; 
... 
utf8::decode($text); 
$text =~ /привет/; 
関連する問題