perl正则表达式中UTF8的奇怪性

时间:2014-12-22 15:02:56

标签: regex perl utf-8

我正在研究一些处理可能格式错误的UTF8的Perl代码,并且遇到了与正则表达式匹配的奇怪现象。请考虑以下代码:

#!/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 个答案:

答案 0 :(得分: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