请教prog1.pl与prog2.pl中while循环的执行逻辑
对prog1.pl和prog2.pl中while循环的分析
prog1.pl 的while循环功能
该循环逐行读取输入文件auste-north-1522.txt,对每一行执行以下逻辑:
- 正则匹配判断:
$_ =~ m/\ <[^i].*[^i]\ >/g
解析这个正则规则:\ <:匹配一个空格后跟<[^i]:匹配**不是i**的单个字符.*:匹配任意长度的任意字符(换行符除外)[^i]:匹配**不是i**的单个字符\ >:匹配一个空格后跟>
简单总结:只要当前行包含类似<X...Y >的片段(X和Y都不是i),就判定为匹配。
- 匹配成功的行,会被直接写入输出文件
outfile3.txt。
整体功能:筛选出包含非<i>类带空格标签的行,保存到outfile3.txt。
prog2.pl 的while循环功能
该循环同样逐行读取输入文件auste-north-1522.txt,逻辑分为两步:
- 标签替换:
$_ =~ s/(\ <i\ >)|(\ <\ /i\ >)//g
解析替换规则:- 匹配两种带空格的HTML斜体标签:
<i>(开标签)和</i>(闭标签) - 把这些标签直接替换为空(从行中删除),修改当前行的内容(存储在Perl默认变量
$_中)。
- 匹配两种带空格的HTML斜体标签:
- 条件输出:
print OUT $_ unless ($_ =~ m/\ <.*\ >/g)unless等价于if not,判断逻辑是:如果替换后的行不再包含任何<...>格式的带空格标签(任意内容被尖括号包裹且前后有空格),就把该行写入输出文件outfile4.txt。
整体功能:先移除行内的带空格斜体标签,再筛选掉所有仍含带空格标签的行,只保留纯文本行到outfile4.txt。
内容的提问来源于stack exchange,提问作者Ave
相关产品推荐
相关产品推荐

