为什么正则表达式不适用于Perl中的全局标识?

时间:2012-02-10 22:53:02

标签: regex perl

这很奇怪,我不知道这是什么问题!

我有一个非常大的字符串(长度= 648745),我不知道它的长度是否可以解决这个问题,但我正在尝试在其中找到一些参数,并将它们推送到一个数组,就像这样:

push(@items_ids, [$2, $3]) while ($all_items_list =~ /itemID&(id|num)=([\d]*)\">\#([\d]*)/g);

它不起作用,它最后返回一个空数组。我想可能是我的RegEx不对,但是当我运行这段代码时:

while ($all_items_list =~ /itemID&(id|num)=([\d]*)\">\#([\d]*)/){
    print "\nItemID=$2 Identity=$3\n";die;
}

它找到了第一次出现,当我在ReEx的末尾加上“g”它再也找不到它了......

我知道我在这里遗漏了一些东西,请帮助我,这不是我剧本的一个难点而且我被卡住了,:( ...

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

在标量上下文中,m/.../g开始关注上一次成功m/.../g停止的位置。我建议在循环之前重置搜索位置:

pos($all_items_list) = undef;
push(@items_ids, [$2, $3]) while ($all_items_list =~ /itemID&(id|num)=([\d]*)\">\#([\d]*)/g);

并看看是否有帮助。 (见http://perldoc.perl.org/functions/pos.html。)