我正在编写一些处理可能格式错误的 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;
输出为:
One
Three
为什么第二个正则表达式也不匹配?有解决办法吗?
我使用的是 Perl 5.14.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
关于regex - Perl 正则表达式中 UTF8 的奇怪之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27605218/