私は正規表現したいウェブサイト、例えばhttp://www.ru.wikipedia.org/wiki/perlを持っています。サイトはロシア語であり、私はロシアのすべての言葉を抜きたい。 \w+
との一致は機能せず、\p{L}+
との一致はすべてを取得します。Perlを使ってロシア語のUnicodeテキストをどのように一致させるのですか?
どうすればよいですか?
私は正規表現したいウェブサイト、例えばhttp://www.ru.wikipedia.org/wiki/perlを持っています。サイトはロシア語であり、私はロシアのすべての言葉を抜きたい。 \w+
との一致は機能せず、\p{L}+
との一致はすべてを取得します。Perlを使ってロシア語のUnicodeテキストをどのように一致させるのですか?
どうすればよいですか?
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";
}
WikipediaはLWP :: Simpleリクエストをブロックするようです。ユーザーエージェントの文字列を変更するとうまくいくかもしれません。 –
あなたはロシアの言葉では '\ x {0401} - \ x {042f}'を意味すると思います。文字を過度に一致させる必要はありません。ユニコードテーブルを確認する[ここ](http://www.wikiwand.com/en/Russian_alphabet) –
さて、これを試してみてください。
#!/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
で終了するので、これは言葉の多くを取得する必要があると考えています。
throwswに警告:「一致したUTF-8文字(開始バイト0xbfの後に0x4043e433、0xd1バイトでオーバーフロー)がretrieveFromWiki.pl行45でパターンマッチ(m //)英語の用語を含むすべてを取得します(英語の文字) –
これらすべての答えはovercomplicatedです。この
$text =~/\p{cyrillic}/
BAMを使用してください。
このままにしてください。 特定のロシア語の単語に一致する
use utf8;
...
utf8::decode($text);
$text =~ /привет/;
これはまさにUnicodeプロパティのためのものです。 \ p {キリル文字}を使用します。 –