请教flw 给解释一下 滥用正则的坏处?范畴?



QUOTE:
原帖由 forlorngenius 于 2008-9-10 17:00 发表
窃以为是正则的通用性不好,只能给某个特定的任务制定。换句话,只能使用一次

Perl 有个通用的正则表达式包你可知道?
如何把握好何时用正则,很难拿捏分寸的。
测试代码   

(打开一文件 匹配第一列 测试1万次)

[Copy to clipboard] [ - ]
CODE:
use strict;
use warnings;
use Benchmark;

timethis(10000,"sdiff()");

sub sdiff{
        my $i=0;
        open(FF,"./hk_base.txt");
        while(<FF>){
                my ($code) = split;
                #if($code eq '00758'){
                if($code =~ /^00758$/){
                        $i++;
                }
        }       
        close(FF);
        return $i;
}

测试结果

[Copy to clipboard] [ - ]
CODE:
if($code eq '00758'){
timethis 10000: 76 wallclock secs (57.20 usr + 18.70 sys = 75.91 CPU) @ 131.74/s (n=10000)

if($code =~ /^00758$/){
timethis 10000: 76 wallclock secs (56.77 usr + 18.61 sys = 75.38 CPU) @ 132.67/s (n=10000)

俺的 意思是 对每个不同的需求得写个不同得re,稍微改动都得跟着改


QUOTE:
原帖由 hitsubunnu 于 2008-9-10 19:15 发表
测试代码   

(打开一文件 匹配第一列 测试1万次)



use strict;
use warnings;
use Benchmark;

timethis(10000,"sdiff()");

sub sdiff{
        my $i=0;
        open(FF,"./hk_base.txt");
        while(){
         ...

你这个测试不地道。
查查 Perl 如何做基准测试吧。
那谁谁说过:
你碰到一个问题,你想用re解决它,现在你就有2个问题了

斑竹说的不错,版里不少数量寻求re解决方式的,其实用不着re的。


QUOTE:
原帖由 cobrawgl 于 2008-9-11 14:58 发表
那谁谁说过:
你碰到一个问题,你想用re解决它,现在你就有2个问题了

斑竹说的不错,版里不少数量寻求re解决方式的,其实用不着re的。

程序不需要优化吗?   算法不需要优化?

我做这个测试 是有原因的   

访问量在百万级别以上   这种最常见的检索提升0.01也是很有意义的