当尝试验证一个字符串只由字母字符组成时,我想到了两种可能的正则表达式解决方案。
第一种方法检查字符串中的每个字符是否是字母数字字符:
/^[a-z]+$/
第二种方法是在字符串中查找一个非字母数字字符:
/[^a-z]/
(是的,我可以在这里使用字符类。)
对于长字符串,是否有显着的性能差异? (如果有,我猜第二种变体会更快。)
当尝试验证一个字符串只由字母字符组成时,我想到了两种可能的正则表达式解决方案。
第一种方法检查字符串中的每个字符是否是字母数字字符:
/^[a-z]+$/
/[^a-z]/
(是的,我可以在这里使用字符类。)
对于长字符串,是否有显着的性能差异? (如果有,我猜第二种变体会更快。)
我写了这个快速Perl代码:
@testStrings = qw(asdfasdf asdf as aa asdf as8up98;n;kjh8y puh89uasdf ;lkjoij44lj 'aks;nasf na ;aoij08u4 43[40tj340ij3 ;salkjaf; a;lkjaf0d8fua ;alsf;alkj
a a;lkf;alkfa as;ldnfa;ofn08h[ijo ok;ln n ;lasdfa9j34otj3;oijt 04j3ojr3;o4j ;oijr;o3n4f;o23n a;jfo;ie;o ;oaijfoia ;aosijf;oaij ;oijf;oiwj;
qoeij;qwj;ofqjf08jf0 ;jfqo;j;3oj4;oijt3ojtq;o4ijq;onnq;ou4f ;ojfoqn;aonfaoneo ;oef;oiaj;j a;oefij iiiii iiiiiiiii iiiiiiiiiii);
print "test 1: \n";
foreach my $i (1..1000000) {
foreach (@testStrings) {
if ($_ =~ /^([a-z])+$/) {
#print "match"
} else {
#print "not"
}
}
}
print `date` . "\n";
print "test 2: \n";
foreach my $j (1..1000000) {
foreach (@testStrings) {
if ($_ =~ /[^a-z]/) {
#print "match"
} else {
#print "not"
}
}
}
然后使用以下命令运行: date; <perl_file>; date
这并不是百分之百科学的,但它给了我们一个很好的想法。第一个正则表达式执行了10或11秒钟,第二个正则表达式执行了8秒钟。