作者jjt (jet)
看板Perl
标题Re: [请益] 一段string matching的意思
时间Wed Jan 2 19:44:44 2008
※ 引述《JeffMcBride (帅啊!老皮)》之铭言:
: 各位大大大家好
: 小弟在此板初来乍到若有冒犯请多多包含
: 我比较熟悉php但是拿到一段perl的程式码
: 但是这个段落的部份
: 有个地方不是很了解..关於RE部份
: 下面红色标记处
: 1. [=]中括号的等於 是表示什麽意思呢
标示会match 到'='这个字元符号
: 2. $2 在哪边被定义出现的呢..
假如 $theText = 'aaabbbb'
if($theText =~/(a*)(b*)/)
$1 就是第一个括弧match到的字串 也就是'aaa'
$2 就是第二个括弧match到的字串 也就是'bbbb'
所以$1 $2 $3 ...分别是第几个括弧match到的字串
: 3. $2/$to 这边表示 两个字串以 / 做连结吗??
不对
$theText =~ m/A/ 表示比对A字串 传回结果,後面加上g就是全部比对
$theText =~ s/A/B/ 表示用B字串取代A字串,最後面加上g就是全部取代
没加上g 只会取代一次 / 比对出一个结果
: 谢谢各位大大m(_ _)m
: ------------- code -------------
: while ( $theText =~ m/([=\%\&]([A-Za-z0-9]{2}))/g )
: {
: my $to = hex($2);
: $to = chr($to);
: if($2 ne "01")
: {
: $theText =~ s/[=\%]$2/$to/g;
: }
: }
: --------------------------------
while要成立
必须match到m/([=\%\&]([A-Za-z0-9]{2}))/g
遇到 '=' or '%' or '&' 开头,後面接上连续两个是a-zA-Z0-9的字元
然後如果那连续两个a-zA-Z0-9的字元不等於'01'的话
就把遇到 '=' or '%'开头A後面接上连续两个是a-zA-Z0-9的字元
取代成char(hex(那两个字元)
不过这个程式写的不好就是 先不谈那个
范例
$theText = "=30=32%34";
把30 32 34 从hex值转成相对应的10进位 再转成char
30->48= '0'
32->50= '2'
34->52= '4'
所以$theText 会从'30=32%34'变成 012
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.197.133
※ 编辑: jjt 来自: 140.121.197.133 (01/02 19:50)
1F:→ JeffMcBride:谢谢大大的范例:D perl越来越有趣 01/02 20:03
2F:推 JeffMcBride:不过您埋下的伏笔.."这个程式写的不好" 是为什麽呢.. 01/02 20:28
3F:推 abliou:推楼上的!!我也想知道理由...XD 01/02 21:32