2012-02-10 23 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

相關問題