2012-02-10 42 views
3

这是非常奇怪的,我不知道什么是问题!我有一个非常大的字符串(长度= 648745),我不知道它的长度是否可以使这个问题,但我试图找到它里面的一些参数,并推送他们到一个数组,像这样的:为什么正则表达式不适用于Perl中的全局标识?

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

它不工作,它在最后返回一个空数组。我想可能是我的正则表达式是不正确的,但是当我运行此代码:

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

它找到的第一次出现,当我把“G”在ReEx结束它无法再找到它。 ..

我知道我失去了一些东西,请大家帮我,这不是我的剧本的困难的部分,我被卡住,:(...

在此先感谢您的帮助。

回答

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。)

+0

谢谢SOOOOOOO很多!...它解决了问题,谢谢:) – Monica 2012-02-10 23:19:18

+0

@Monica:非常欢迎您! :-D – ruakh 2012-02-10 23:20:46

+1

真正的问题在于你的其他代码将匹配位置留在字符串中间的某处。 – Sean 2012-02-10 23:48:45

相关问题