Perl正则表达式不起作用

时间:2012-05-27 10:53:21

标签: regex perl matching

您好我正在尝试使用Perl脚本获取一些东西。

my $fileName = "I_Payment_OK_2";
my ($msgType, $OfaCode, $msgCount) = $parseFileName;

#my $msgType = $parseFileName;
print $OfaCode;
print $msgType;
print $msgCount;

# parse the values from filename
sub  parseFileName {
     # parse the message type
     if($fileName =~ m/^(I|O)/) {
        $var1 = $1;
     }  
     # parse the OFAC trace keyword
     if($fileName =~ m/^[A-Z_][A-Za-z_]([A-Z]+)\w(\d+)$/) {
        $var2 = $2;
        $var3 = $3;
     }
     # return the message type & OFAC trace
     return ($var1, $var2, $var3);
     #return $var1; 
}

什么都没打印出来。有人可以帮我解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:1)

你永远不会调用parseFileName()。可能my ($msgType, $OfaCode, $msgCount) = $parseFileName;应为my ($msgType, $OfaCode, $msgCount) = parseFileName();

答案 1 :(得分:1)

您应该在程序开始时始终 use strictuse warnings,并使用my在首次使用时声明所有变量。这尤其适用于您在寻求代码帮助时,因为此措施可以快速揭示许多简单的错误。

从代码的外观来看,您似乎应该使用split

此程序将文件名字符串拆分为下划线,并提取第一个和最后两个字段。

use strict;
use warnings;

my $fileName = "I_Payment_OK_2";

my ($msgType, $OfaCode, $msgCount) = (split /_/, $fileName)[0, -2, -1];

print $msgType, "\n";
print $OfaCode, "\n";
print $msgCount, "\n";

<强>输出

I
OK
2