2012-02-10 5 views
3

これは非常に奇妙なことですが、何が問題なのかわかりません!正規表現がPerlのグローバルIDで動作しないのはなぜですか?

私は非常に大きな文字列(長さ= 648745)を持っていますが、その長さがこの問題を引き起こすかどうかはわかりませんが、その中のいくつかのパラメータを見つけようとしていますこれは

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

最後に空の配列を返します。私は私の正規表現は適切ではないかもしれ思ったが、私はこのコードを実行すると:私はReExの末尾に「G」を入れたときに

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

それが最初の発生を発見し、それはもはやそれを見つけることができません。 ..

に私は、私はここで何かが欠けてる知って、私を助けてください、これは私のスクリプトの難しい部分ではないと私はこだわっている、:(...あなたの助けを事前に

感謝。

答えて

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 MUCH!...問題を解決しました。ありがとう:) – Monica

+0

@Monica:あなたは大歓迎です! :-D – ruakh

+1

本当の問題は、文字列の途中でマッチ位置を残す他のコードにあります。 – Sean

関連する問題