LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2896|回复: 17

在perl中怎么样访问字符串中的单个字符?

[复制链接]
发表于 2004-4-8 13:15:24 | 显示全部楼层 |阅读模式
在C、php中可以通过下标来访问,那么在perl中呢?
发表于 2004-4-8 16:18:54 | 显示全部楼层
这些都是关于控制字符的函数:
    chomp, chop, chr, crypt, hex. index, lc, lcfirst, length, oct, ord, pack, q/STRING/, qq/STRING/, reverse, rindex, sprintf, substr, tr///, uc, ucfirst, y///

如何从string中取得的第10到20的子字符串。
$string2=substr($string1,10,20-10);
函数第一个参数是操作的对象,第二个参数是要取得的字符串的长度,第三个参数是字符串在$string中的尾头的序数。
 楼主| 发表于 2004-4-8 16:37:01 | 显示全部楼层
这样有些时候很不方便的,比方说,我要扫描一个字符串的话,难道就得一次次的使用substring,每次都只取出一个字符?
再比方说,我只想改变字符串中的某个字符,例如第10个,那又该怎么办呢?
发表于 2004-4-8 17:11:07 | 显示全部楼层
在一个文件中
把 / 替换成-

$ cat x
\\\\\\\\\\\\\\\\\
$ perl -pe 's/\\/-/g' < x


批量字符替换的模块
这是下载地址:
http://search.cpan.org/~yxes/Dat ... 01/SearchReplace.pm


在赋值的同时完成字符串的替换

  1. #!/usr/bin/perl
  2. ($a = $ARGV[3])=~s/(\.0|2)/&replace($1)/eg;
  3. print "$a\n";
  4. sub replace(){
  5.   my $tmp=shift;
  6.   if($tmp eq ".0"){ return ""; }
  7.   elsif($tmp == 2){ return "2c";}
  8. }
复制代码


还可以参考一下seek()的用法,用perldoc -f seek看手册。
有个贴子做参考
http://bbs.chinaunix.net/forum/v ... hlight=%D7%D6%B7%FB
发表于 2004-4-8 17:21:12 | 显示全部楼层
如果要知道某个字符在字符串中的位置就用index()
example:

  1. $answer1 = index("abcdefghijiklmdef:-)", "def");

  2. $answer2 = index("abcdefghijiklmdef", "def", $answer1 + 3);

  3. print("index() def is at $answer1 and next at $answer2\n");

复制代码
 楼主| 发表于 2004-4-8 17:47:33 | 显示全部楼层
我想你还是没理解我的意思。
我的意思是这样的,举个例子,要将含中文的url转化过来,在url中文是用数字表示的%xx,可能有个这样的url:http://%aa%bb%cc。如果我想把它转化为中文的话,我就可以从字符串的开头开始扫描,发现了一个%之后,我就知道后面的两位是中文的编码,转化就可以了,但是在perl中售似乎不大好实现这个扫描。
发表于 2004-4-8 18:45:51 | 显示全部楼层
ft
perl最强的就是正则
 楼主| 发表于 2004-4-8 19:01:22 | 显示全部楼层
最初由 roby 发表
ft
perl最强的就是正则

不要一上来就ft,拿出解决方法再卖弄也不迟。
发表于 2004-4-8 19:19:33 | 显示全部楼层
就可以从字符串的开头开始扫描,发现了一个%之后
PHP不需要这样的,正则表达式的功能是很强大的,扫描都要自己写的话,那只有C语言了,你可以用C写一个扫描的子程序,然后象上面的调用一样!

local $value = '%20';
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
print '-'.$value.'-';
发表于 2004-4-8 20:08:06 | 显示全部楼层
最初由 pupilzeng 发表
我想你还是没理解我的意思。
我的意思是这样的,举个例子,要将含中文的url转化过来,在url中文是用数字表示的%xx,可能有个这样的url:http://%aa%bb%cc。如果我想 ... 现这个扫描。


你先头都没说出来,我当然不懂。。。。

这现有的软件包,要用哪个阿。。。郁闷。。
http://www.cpan.org/modules/01modules.index.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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