Re: [問題] 用RegExp將字串切割
再承續這個問題
有沒有辦法像切吐司一樣
一次切一段出來用
第一次: $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
03/23 10:29, 1F
→
03/23 12:02, , 2F
03/23 12:02, 2F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 2 之 5 篇):