简单字符串处理应避免使用正则表达式

请记住,所有正则表达式匹配过程都会涉及匹配变量的处理,即使是最简单的正则表达式也不例外。

在Perl中,简单的字串操作应该使用特定的函数,比如index,rindex,substr以及tr///等。

1.字串比较操作符

#较快的方法
if ($answer eq 'yes' )  { somesting_wonderful() }

2.用index 和 rindex 提取子串

index 操作符可以在较长字串中定位一个较短子串的位置。而rindex则是从最右端起定位,但位置的计算方式认识从左到右:

#在$big_str里寻找$little_str的位置,其实下标是0
my $pos = index $big_str,$little_str;

#从big_str右边起,第一个出现$little_str子串的起始位置
my $pos = rindex $big_str,$little_str;

3. 用substr提取或修改子串

substr 操作符的作用是根据给定起始位置和字串长度提取字符串中的一部分内容。如果没有指定长度,则提取从指定位置开始一直到字串末尾的字串:

#得到“Perl”
my $perl = substr "It's a Perl World",7,4;

#得到“Perl World”
my $perl_world = substr "It's a Perl World",7;

如果把substr表达式放在赋值操作的左侧,就是字串替换操作,即右侧字串将替换由substr指定位置和长度的字串,这种写法非常优雅:

#修改字串变量world
my $world = "It's a Perl World";
substr($world,7,4) = "Mad Mad Mad Mad";

将index 和 substr 结合起来,还可以实现类似于s///替换的功能。 不过只是替换的话,倒不如还使用s///,不但更快,而且意义明晰。

4.批量转换单个字符

不要忘了Perl还有tr///操作符,即字串转换操作符。 虽然形式更近,但它不是正则表达式,它所做的只是字符间的转换而已。 tr///没有/g选项,因为默认就是全局替换。

如果只想对字串某一部分转换,可以用substr限定范围

substr($string,0,10) =~ tr/a/b/;
原文地址:https://www.cnblogs.com/tjxwg/p/2993718.html