perl取文本中一部分数据

hehe.comAdministrativeContact:Domains,OIoidomains@gmail.comPOBoxHM2900Hamilton,Hamilt... hehe.com
Administrative Contact:
Domains, OI oidomains@gmail.com
PO Box HM2900
Hamilton, Hamilton HMLX
BM
01962843453
Technical Contact:
Domains, OI oidomains@gmail.com
PO Box HM2900
Hamilton, Hamilton HMLX
BM
01962843453
文件是上面这样的,当然这也是整个文件中的一段,我的目的:
1、当匹配到Administrative Contact:的时候输出Administrative Contact:和Technical Contact:之间的那5行
2、当然这5行不是固定的可能是N行,特点就是以空格开头
3、目的就是输出Administrative Contact:下面以空格开头的行直到出现以字符开头的行停止。
我是先定义上述内容为数组@a
用for循环 for($i=0;$i<@a;i++){
next unless $a[$i]=~ /Administrative Contact/;
print $a[$i];
last if $a[$i] =~ /^\s*Technical/;
} 这样为什么不行?应该怎么写? 最好就用for循环表示出来谢谢了
展开
 我来答
76de1
2013-10-28 · TA获得超过1158个赞
知道小有建树答主
回答量:666
采纳率:100%
帮助的人:489万
展开全部
open F, "F:/1.txt"; #1.txt是你画面上那个文件
@array=<F>;
$count=-1;
foreach (@array){
$count++;
if(/Administrative Contact:/){$start=$count+1;}#记录开始行数号
if(/Technical Contact:/){$end=$count-1; }}#记录结束行数号
for ($start..$end) {                    #两个行数相减就是你要的东西
print "$array[$_]\n";}

或者按照你的方法:
open F, "F:/1.txt"; #1.txt是你画面上那个文件
@a=<F>;
for($i=0;$i<@a;$i++){
        if($a[$i]=~/^\s+/){print  $a[$i];}
        last if $a[$i] =~ /^\s*Technical/;}
        #用一个last就行了,遇到Technical这个单词,循环退出
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式