无法找到Unicode属性定义" o" - 正则表达式在perl中不起作用

时间:2014-09-19 11:02:43

标签: perl

我正在尝试从字符串中捕获一个子字符串,因为我正在使用regx,但它无法正常工作。我得到的错误是Can't find Unicode property definition "o"

我正在使用Windows机器运行以下代码。

以下是代码:

use strict;
use warnings;
my $path = 'C:\APTscripts\APStress\Logs\APStress_September-18---20.44.25\APTLogs\PostBootLogs\09-18-2014_15-18-32\UILogs_09-18-2014_15-50-43.txt';
my ($captured) = $path =~ /(.+?) \PostBootLogs/gx;
print "$captured\n";

2 个答案:

答案 0 :(得分:3)

你只需要逃避模式中的反斜杠:

/(.+?) \\PostBootLogs/gx

您在使用\P时无意中触发了Unicode character properties的使用。

答案 1 :(得分:0)

如前所述,您需要在正则表达式中转义文字反斜杠。

my ($captured) = $path =~ /(.+?) \\PostBootLogs/x;

但是,如果您使用Path::Class或类似的文件和目录管理模块,也可以在没有正则表达式的情况下完成相同的任务。

use Path::Class;

my $captured = file($path)->dir->parent->parent;