用 else 的话, 你得把 /^\s+(.*)$/ 放在 else 块中,再做处理:<br>我是这样处理的:<br>-------------------------------------------------<br>#!/usr/bin/perl;<br>use strict;<br><br>my ($name, $title) = ();<br><br>while(<DATA>){<br><br> if (/^(\d+)\s+(.*)$/){<br>
<br> print "====\n$name\t$title\n=====\n" if $name;<br> $name = $1;<br> $title = $2;<br> next;<br><br> } elsif (/^\s+(.*)$/) {<br><br> $title.= $1;<br> }<br><br> print "====\n$name\t$title\n=====\n" if eof;<br>
<br>}<br><br><br>__DATA__<br>2222 eewweasdds,asdasd.sadsadasdas<br> ddasdddddddddddddddddddda<br> ddddddddddddddddddddddddddd<br>2821 easdddddddddddddddddddddddd<br>2192 288888888888888888888ass0a-das.<br> as;dddsaddaa0---------22222222<br>
3030 123456<br> 789<br><br>#-----------------END-----------------<br><br><div class="gmail_quote">2009/3/3 owen nirvana <span dir="ltr"><<a href="mailto:freeespeech@gmail.com">freeespeech@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">> my ($name, $title);<br>
> while (<>){<br>
> if (/^(\d+)\s+(.*)$) {<br>
> if ($name) {<br>
> // 保存上一个 save $name, $title<br>
> // 下面开始处理一个新的<br>
> $name = '';<br>
> $title = '';<br>
> }<br>
> $name = $1;<br>
> $title .= $2;<br>
> } elsif(/^\s+(.*)$/) {<br>
> $title .= $1;<br>
> }<br>
> // save last one<br>
<br>
把自己的老问题翻上来,今天突然发现如果不是elsif, 而是else, 就只有匹配行的第二行会被合并,下一行就不会, why<br>
<a href="mailto:gtalk%3Afreeespeech@gmail.com">gtalk:freeespeech@gmail.com</a><br>
<br>
<br>
<br>
2008/11/18 <<a href="mailto:china-pm-request@pm.org">china-pm-request@pm.org</a>>:<br>
> Send China-pm mailing list submissions to<br>
> <a href="mailto:china-pm@pm.org">china-pm@pm.org</a><br>
><br>
> To subscribe or unsubscribe via the World Wide Web, visit<br>
> <a href="http://mail.pm.org/mailman/listinfo/china-pm" target="_blank">http://mail.pm.org/mailman/listinfo/china-pm</a><br>
> or, via email, send a message with subject or body 'help' to<br>
> <a href="mailto:china-pm-request@pm.org">china-pm-request@pm.org</a><br>
><br>
> You can reach the person managing the list at<br>
> <a href="mailto:china-pm-owner@pm.org">china-pm-owner@pm.org</a><br>
><br>
> When replying, please edit your Subject line so it is more specific<br>
> than "Re: Contents of China-pm digest..."<br>
><br>
><br>
> Today's Topics:<br>
><br>
> 1. Re: China-pm Digest, Vol 43, Issue 21 (truncatei)<br>
><br>
><br>
> ----------------------------------------------------------------------<br>
><br>
> Message: 1<br>
> Date: Mon, 17 Nov 2008 22:01:40 +0800<br>
> From: truncatei <<a href="mailto:truncatei@gmail.com">truncatei@gmail.com</a>><br>
> Subject: Re: [PerlChina] China-pm Digest, Vol 43, Issue 21<br>
> To: <a href="mailto:china-pm@pm.org">china-pm@pm.org</a><br>
> Message-ID:<br>
> <<a href="mailto:c0d775f40811170601m6c2437aeyc2a3c19e7fe0a82e@mail.gmail.com">c0d775f40811170601m6c2437aeyc2a3c19e7fe0a82e@mail.gmail.com</a>><br>
> Content-Type: text/plain; charset="utf-8"<br>
><br>
> 2008/11/17 owen nirvana <<a href="mailto:freeespeech@gmail.com">freeespeech@gmail.com</a>><br>
><br>
>> 谢谢,问题是归到上一行这样的操作,我不知道如何用正则表达式完成,那不等于是让表达式再回溯吗<br>
>> <a href="mailto:gtalk%3Afreeespeech@gmail.com">gtalk:freeespeech@gmail.com</a> <<a href="mailto:gtalk%253Afreeespeech@gmail.com">gtalk%3Afreeespeech@gmail.com</a>><br>
>><br>
>><br>
>> >><br>
>> >><br>
>> >> 还有一个问题,是关于提取数据的<br>
>> >><br>
>> >> 2222 eewweasdds,asdasd.sadsadasdas<br>
>> >> ddasdddddddddddddddddddda<br>
>> >> ddddddddddddddddddddddddddd<br>
>> >> 2821 easdddddddddddddddddddddddd<br>
>> >> 2192 288888888888888888888ass0a-das.<br>
>> >> as;dddsaddaa0---------22222222<br>
>> >><br>
>> >> 诸如此类,左边很好办,可是右边并不限于单行,我该如何把这样的数据提取为 name title的格式存到数据表里呢<br>
>><br>
>> <<a href="http://mail.pm.org/mailman/listinfo/china-pm" target="_blank">http://mail.pm.org/mailman/listinfo/china-pm</a>><br>
><br>
><br>
><br>
> my ($name, $title);<br>
> while (<>){<br>
> if (/^(\d+)\s+(.*)$) {<br>
> if ($name) {<br>
> // 保存上一个 save $name, $title<br>
> // 下面开始处理一个新的<br>
> $name = '';<br>
> $title = '';<br>
> }<br>
> $name = $1;<br>
> $title .= $2;<br>
> } elsif(/^\s+(.*)$/) {<br>
> $title .= $1;<br>
> }<br>
> // save last one<br>
><br>
> 好久不写了,上面的代码或许会有些错误,大概的流程整理出来了:<br>
> 每次遇到数字就开始一条数据,否则视为向当前数据中添加title<br>
><br>
><br>
> --<br>
> "老是呆在那里不好,我们随生活需要四处迁徙,多年以来的梦想,至今还未实现,压力堵塞了我们的耳朵,工作生涯到了尽头,还是一无所有,我们应该给后人留下点儿什么,教训是不会刻在纪念碑上的,光荣的命令和指引之手,也可请求,简单地改变一下角度就足够了"<br>
> -------------- next part --------------<br>
> An HTML attachment was scrubbed...<br>
> URL: <<a href="http://mail.pm.org/pipermail/china-pm/attachments/20081117/e8fdbb3d/attachment-0001.html" target="_blank">http://mail.pm.org/pipermail/china-pm/attachments/20081117/e8fdbb3d/attachment-0001.html</a>><br>
><br>
> ------------------------------<br>
><br>
> _______________________________________________<br>
> China-pm mailing list<br>
> <a href="mailto:China-pm@pm.org">China-pm@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/china-pm" target="_blank">http://mail.pm.org/mailman/listinfo/china-pm</a><br>
><br>
> End of China-pm Digest, Vol 43, Issue 23<br>
> ****************************************<br>
><br>
_______________________________________________<br>
China-pm mailing list<br>
<a href="mailto:China-pm@pm.org">China-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/china-pm" target="_blank">http://mail.pm.org/mailman/listinfo/china-pm</a></blockquote></div><br>