在Perl中使用预编译的正则表达式时出现的问题

时间:2011-11-21 18:11:40

标签: regex perl precompile

当我尝试在Perl脚本中实现预编译的正则表达式时,我遇到了一些匹配问题。我有脚本工作没有预编译,任何时候我有一个跨越行的快递,它在预编译时不返回匹配。例如:

my $regex_partner = qr/<h1 id="PartnerName">(?<partner_name>.*?)<\/h1>/;
$content =~ $regex_partner;
$partner_name = $+{partner_name};

预编译时工作正常,但是:

my $regex_web =~ qr/Company Website:.*openWindow[(]'(?<website>http:\/\/.*?)'/s;
$content =~ $regex_web;
$website = $+{website};

什么都不返回,但如果我拿出整个预编译就行了。似乎任何时候使用qr // s,它都行不通。

帮助?

1 个答案:

答案 0 :(得分:9)

你有一个错字。

my $regex_web =~ qr/.../s;

应该是:

my $regex_web = qr/.../s;

前者正在对$regex_web执行模式匹配。后者将模式分配给$ regex_web。如果出现警告,你就会得到“在模式匹配中使用未初始化的值$ regex_web”警告。

除非你的帖子中有拼写错误?