我有一个解析环境(Marpa::R2::Scanless),需要使用单个Perl正则表达式字符类来控制标记化。我有一些要标记的东西似乎不适合任何现有的字符类。因此,在深入研究perlunicode文档之后,我提出了以下代码,但它无法按预期工作。我希望看到一排点点缀有所有非字母数字(括号除外)。相反,我收到一个有关无法找到字符类的运行时错误。

#!/usr/bin/env perl

use 5.018;
use utf8;

local $| = 1;

for my $i (map { chr($_) } 32 .. 127) {
    if ($i =~ /\p{Magic::Wow}/) {
        print $i;
    }
    else {
        print ".";
    }
}

package Magic;

sub Wow {
    return <<'MAGIC';
+utf8::Assigned
-utf8::Letter
-utf8::Number
-0028
-0029
MAGIC
}

1;

有任何提示,技巧,窍门或建议吗?

最佳答案

命名子IsWow和属性Magic::IsWow

引用User-Defined Character Properties in perlunicode:

关于regex - Perl 5.018中的自定义字符类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17673795/

10-11 18:15