作者WindChris (恶灵 退散)
看板perl
标题Re: [问题] 用RegExp将字串切割
时间Fri Mar 23 02:19:35 2007
再承续这个问题
有没有办法像切吐司一样
一次切一段出来用
第一次: $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)
1F:推 Andor:s/\|%.*?(?=\|%|$)//s 或 用index加substr像C一样做 03/23 10:29
2F:→ jlovet:我觉得会很慢,是因为你对一个大字串str做regex吧 03/23 12:02