曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3301|回复: 0
打印 上一主题 下一主题

substr -- 处理字串

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2011-10-12 19:07:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-26 01:07 , Processed in 0.083718 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表