曲径通幽论坛

标题: substr -- 处理字串 [打印本页]

作者: beyes    时间: 2011-10-12 19:07
标题: substr -- 处理字串
substr 函数可以用来处理字串,使用方法如下:
[Plain Text] 纯文本查看 复制代码
$part = substr($string, $initial, $length);


第 1 个参数表示要处理的字符串,第 2 个参数表示从第 1 个参数所表示的字符串的那个位置开始查找,第 3 个参数表示字串的长度。


用法示例一:
[code=perl]#!/usr/bin/perl

my $url = "www.groad.net";

my $mineral = substr($url, 4, 5);
print "$mineral\n";

my $long = substr($url, 4, 300);
print "$long\n";

my $long = substr($url, 4);
print "$long\n";[/mw_shl_code]
运行输出:
./substr.pl
groad
groad.net
groad.net
在第 1 种处理中,第三个参数值为 5,明确指定了要输出的字串的长度。
在第 2 种处理中,省略了第三个参数,这时函数默认取从第 4 个字节开始到字符串结束的所有内容作为返回的字串。
在第 3 种处理中,我们虽然指定长度 300 超出了字串的最长可能,但这并不会出错。

实际上,函数的第 2 个参数也可以为负值,当它为负值时,表示从字符串的结尾往前倒数,比如 -1 就表示最后一个字符,-3 就是倒数的第 3 个字符,如下示例:
[code=perl]my $tail = substr($url, -4);
print "$tail\n";[/mw_shl_code]
输出:
.net

substr 可以和
index
函数配合使用
[code=perl]my $url = "www.groad.net";
my $mineral = substr($url, 4, 5);
my $right = substr($url, index($url,$mineral));
print "$right\n";[/mw_shl_code]
运行输出:
groad.net

实际上,当 substr 的第 1 个参数的字符串用变量表示时,我们可以修改该字符串被选取的部分:

[code=perl]substr($url, 4) = "wentowns.com";
print "$url\n";[/mw_shl_code]
运行输出:
www.wentowns.com

substr 和 index 能做到的事多半正则表达式也能做,可以根据需要选择合适的解决方法,但通常来说 substr 和 index 会快一点,因为它没有正则表达式引擎的额外负担。

也许像上面用字符串给函数赋值从而改变第 1 个参数变量的用法看起来有点怪,我们可以将替换字符串作为第 4 个参数,替换行为仍然会发生,同时还可以使用一个变量来接收返回值用以保存替换前的字串:
[code=perl]#!/usr/bin/perl
my $url = "www.groad.net";

my $previous_value = substr($url, 4, 9, "wentowns.com");
print "$url\n";
print "$previous_value\n";[/mw_shl_code]
运行输出:
./substr.pl
www.wentowns.com
groad.net





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2