2

私はこの定期的な表現をしています。

my ( $word ) = $_ =~ /(\w{2,})/xms;

Unicodeを持つ単語を正しくキャプチャできません。私はそれをやって修正することができました

my ( $word ) = $_ =~ /(\w{2,})/uxms;

ただし、この/u機能は5.14でのみ使用できます。とにかく5.10で単語を一致させることができますか?

完全なコードはここにあります:Dist :: Zilla :: Plugin :: Test :: PodSpelling

いくつかのコイを追加する(正規表現の前後)

Simões at /home/ccushing/perl5/perlbrew/perls/perl-5.16.2/lib/site_perl/5.16.2/x86_64-linux/Class/MOP/Method/Wrapped.pm line 162.
Sim at /home/ccushing/perl5/perlbrew/perls/perl-5.16.2/lib/site_perl/5.16.2/x86_64-linux/Class/MOP/Method/Wrapped.pm line 162.

use 5.014また、ファイルの先頭に追加するだけで問題が解決することにも注意してください。正規表現の前に追加utf8::upgrade( $_ )しても問題は解決しませんでした。

4

2 に答える 2

3

\p{Word}の代わりに使用してください\w\w(いくつかの複雑なルールに応じて)Unicodeセマンティクスを持っている場合と持っていない場合がありますが、\p常に持っています。

于 2013-02-15T02:02:45.813 に答える
1

use feature qw( unicode_strings );いくつかのバージョンでトリックを行います。utf8::upgrade($_);試合前にすべてのバージョンでトリックを行います。

テスト:

use open ':std', ':utf8';
$_ = "Sim\xF5es";
print $_ =~ /(\w{2,})/xms, "\n";
utf8::upgrade($_);
print $_ =~ /(\w{2,})/xms, "\n";

出力:

Sim
Simões
于 2013-02-15T06:44:44.513 に答える