2014-12-22 46 views
2

我正在處理一些處理可能畸形的UTF8的Perl代碼,並且遇到了與正則表達式匹配的奇怪現象。請看下面的代碼:在Perl正則表達式中使用UTF8的奇怪

#!/usr/bin/perl 
use strict; 
use warnings; 
use utf8; 

my $string = "One \x{FFFF_FFFF} three\n"; 

my $re1 = qr/\x{FFFF_FFFF}/; 
my $re2 = qr/.*\x{FFFF_FFFF}/; 
my $re3 = qr/.\x{FFFF_FFFF}/; 

print "One\n" if $string =~ $re1; 
print "Two\n" if $string =~ $re2; 
print "Three\n" if $string =~ $re3; 

輸出是:

一個

爲什麼沒有第二個正則表達式也匹配?有沒有解決辦法?

我正在使用Perl 5.14.2。

+1

它爲我用Perl 5.18 – ofrommel

+0

錯誤的我讓你從v5.20.1期望的行爲 – tjd

回答

2

,因爲這是已經被固定在5.18

$ usr/perlbrew/perls/5.16.3t/bin/perl -wE' 
    say "One \x{FFFF_FFFF} three\n" =~ /.*\x{FFFF_FFFF}/ ?1:0' 
0 

$ usr/perlbrew/perls/5.18.2t/bin/perl -wE' 
    say "One \x{FFFF_FFFF} three\n" =~ /.*\x{FFFF_FFFF}/ ?1:0' 
1