为什么说perl的正则表达式功能比Python强大

提问者:雪蕊儿 提问时间:2017年01月08日 人气:0
推荐答案

最大的分别就是.. 速度!

从各种的测试都显示, perl 的正则处理依然是最快的 (不只比 python) , 下面的实测可以去看看

https: 斜斜 stuffivelearned 点 org 斜 doku.php?id=programming%3ageneral%3aphpvspythonvsperl

其实 perl 本来就是正则的鼻祖, 它最初的开发的原意很大程度也是为了正则

至於为甚麼比 python 快其实不难想像

  1. Perl 不是 OO 语言(虽然有 OO 的玩法), 所以用到正则时, 正接就开始跑, 不用继承一堆有的没的属性和方法. 至於 python 还要先把字串 compile 了做一个物件, 才开始做正则, 在底层自然又多了一重功夫

  2. Python 的正则要靠模块来完成, Perl 的正则却已在 perl 解释器的心脏里, 谁会起动的更快就很明显了. 当然, 除了 C Python 还算最快之外, 其他如 JPython, Iron Python 这些要靠 framework 来起动的就必然更慢了


另外就是... 连击和助攻, perl 的正则很可以直接当成 expression (=~ 和 !~ ) 来用, 如:

use utf8;

$wantId = "陈大文";
die "帐号不能用奇怪字符" unless $wantId =~ /^[\w\d]+$/ ;

#或者 
%user = ( 
    1 => { Name => "王子" }, 
    2 => { Name => "小王子" } 
    3 => { Name => "王妹" } );
@姓王的 = grep { $user{$_}{Name} =~ /^王/ } keys %user; 
# @姓王的 = ( 1, 3)

# 又或者
%mask = ( 1 => "M", 2 => "X", 3 => "B" );
$password = "321"; #普通密码
$maskedPw = undef; #加密密码
$password =~ s/(.)/$maskPw .= $mask($1)/eg; 
# maskedPw = "BXM"
上面几例, 试问用 python 要写多少行才做到用样的效果呢.. 不过, 这多少语言层次的问题, 姑且另作别论了.