明辉站/网站教程/内容

Perl语言的文字处理模式之3(4)

网站教程2024-02-04 阅读
[摘要]范例三:   $string="ww22cgi44";   $string=~s/(d+)/$1*2/e;   (d+)代表要找寻$string中一个或是多个数值的字符串,再将找到的字符串设成 $1。加上参数e是代表要把$l*2当作是一个运算式,所以$string="...
范例三:
  $string="ww22cgi44";
  $string=~s/(d+)/$1*2/e;
  (d+)代表要找寻$string中一个或是多个数值的字符串,再将找到的字符串设成
$1。加上参数e是代表要把$l*2当作是一个运算式,所以$string="www44cgi44";
  $string="www22cgi44";
  $string=~s/(d+)/$1*2/eg;
  加上参数e,所以会把$1*2当作是一个运算式来看, 加上参数g就会把全部符合数 值
的字符串经过运算式运算之后再把它取代,所以$string="www44cgi88";

范例四:
  假设原本的字符串是$value="三八!",经CGI数据编码之后,这个字符串就会变成
$value="%A4T%A4K%21"。以下是一个解码的示范程序:
  $value="%A4T%A4K%2l";
  $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($l))/eg;

  在传送CGI数据的时候会把数据编码,其中会将特殊字符或是中文字符编码成以% 开头的连续两个十六进制数的字符串,所以要用s这个函数来找寻这个以%开头的 字符串。为了要把找到的字符串再做解码的处理, 所以要在%这个符号之后加上 ()这个符号, 表示会把找到的字符串记忆起来并指定给$1这个变量,而且要在() 中加上代表是连续两个十六进制数值的文字处理模式(Regular Expression),也 就是[a-fA-F0-9][a-fA-F0-9]。再用hex这个函数($1是代表符合的字符串)把十 六进制数值转成十进制的码,之后再用pack这个函数(以C为参数,是代表 unsigned char value的意思)把这个十进制码还原成原来的字符串。最后就会 把这个字符串解码成$value="三八!"。值得一提的是也可以把这个解码的程序 写成:

  $value=~s/%(..)/pack("C",hex($l))/eg;

……

相关阅读