regex - Perl 正则表达式中 UTF8 的奇怪之处

标签 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;

输出为:

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/

相关文章:

p#q#c# 的 R 正则表达式

Java正则表达式后跟z^3的数字?

mysql - 带有错误编码字符的大型 MYSQL 转储

java - 尝试输出 UTF-8 文本,但不起作用

unicode - ASCII 与 Unicode + UTF-8

regex - 使用正则表达式进行验证

regex - 在 Bash 中使用 2 个不同的分隔符拆分字符串

regex - 无法使用 perl 和正则表达式将模式匹配保存在数组中

regex - Perl 正则表达式匹配替代文件名

php - WordPress 帖子仅显示???保存后的字符。 (仅限 unicode 字符)