Re: [問題] 用RegExp將字串切割

看板Perl作者 (惡靈 退散)時間17年前 (2007/03/23 02:19), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/5 (看更多)
再承續這個問題 有沒有辦法像切吐司一樣 一次切一段出來用 第一次: $tmp = "|%some string1\n"; $str = "|%some string2\n|%...\n|%some string n"; 第一次: $tmp = "|%some string2\n"; $str = "|%some string3\n|%...\n|%some string n"; . . 第n次: $tmp = "|%some string n"; $str = ""; 我試著用loop去處理 while($tmp =~ m/\|%.*?(?=\|%)/s){ do something I want with $&... $tmp = $'; $count++; } print $count."\n"; 理論上是做到了.. 可是實際上效能出奇的差 主要在於 $tmp =$' 這裡是賦值運算 loop 1: $tmp = ----------------------------- ┐ loop 2: $tmp = ---------------------------- ┼ 每次$tmp都代表不同位置的記憶體 loop 3: $tmp = --------------------------- ┘ 所以筆數很大且每筆資料的字串很長時表現很糟糕 不知道有沒有什麼立即的函式能做到我想到的 如: 像C一樣, 用指標能標記每筆的開頭 那我想效能應該會大幅提升 ※ 引述《WindChris (惡靈 退散)》之銘言: : 我有一列字串 : $str = "|%some string 1\n|%some string 2\n|%...\n|%some string" : 也就是這裡頭可拆成 n 個以 |% 開頭的字串 : 想把這字串切成陣列 : 我這麼寫 @_ = ($str =~ m/|%.*?[^|][^%]/gs); : 可是string 裡有 | 這樣就破功了 : 我是有想過用split /|%/, $str : 然後再一個一個把 |% 補回去.. : 可是我處理的字串很大 存成檔案大概 20M 這樣效能會變很差 : 請教各位 像這種的 RegExp 應該長什麼樣子? : 或者根本就寫不出來呢? 只能用split? : 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.143.215.28 ※ 編輯: WindChris 來自: 220.143.215.28 (03/23 02:53)

03/23 10:29, , 1F
s/\|%.*?(?=\|%|$)//s 或 用index加substr像C一樣做
03/23 10:29, 1F

03/23 12:02, , 2F
我覺得會很慢,是因為你對一個大字串str做regex吧
03/23 12:02, 2F
文章代碼(AID): #160iYuNK (Perl)
討論串 (同標題文章)
文章代碼(AID): #160iYuNK (Perl)