perl正则表达式怎么匹配多行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl正则表达式怎么匹配多行?相关的知识,希望对你有一定的参考价值。

Administrative Contact, Technical Contact:
Openfind Informaiton Technology Inc. mis@OPENFIND.COM.TW
4F, 222, Nan-Chang Rd. Sec. 2
Taipei, Taipei
TW
886-2-23697575~140 fax: 886-2-23648738

Record expires on 19-Jan-2014.
Record created on 20-Jan-1998.
Database last updated on 29-Oct-2013 08:13:04 EDT.

Domain servers in listed order:
上面是我定义的@domain_data
我需要输出mis@OPENFIND.COM.TW
不能用循环打开数组啊,那是一行一行的不能匹配换行符
我的程式基本是这样的
while (<@domain_data>)
if (/Administrative Contact, Technical Contact:\n(.*)\s+(.*)\n/)
$domain_mail=$1;


print "$domain_mail";

参考技术A

如果内容在文件中,那么这样读文件就可以把文件读到一个标量中:

local $/;
my $data = <FH>;
print $1 if $data =~ /Administrative Contact, Technical Contact:\\n.+\\s+(\\S+\\@\\S+)\\n/;

如果内容在数组中,那么:

for (my $i = 0; $i < @data; $i++) 
    if ($i > 0 and $data[$i-1] =~ /Administrative Contact, Technical Contact:$/ and $data[$i] =~ /\\s+(\\S+\\@\\S+)$)/) 
        print $1;
        last;
    

本回答被提问者采纳
参考技术B 在正则末尾加个m标记,可以用$匹配行尾

if (/Administrative Contact, Technical Contact:$(.*)\s+(.*)$/m)
只保证正则的正确,没学过perl,不能保证代码的正确
如果原来的代码是正确的,应该能成
参考技术C open F,"F:/1.txt"; #1.txt是你画面上的文件
while(<F>)
$line=<F>;
if(/Administrative/)
$line=~/Openfind Informaiton Technology Inc.\\s+(.*)/;
print $1;

以上是关于perl正则表达式怎么匹配多行?的主要内容,如果未能解决你的问题,请参考以下文章

Perl正则表达式匹配多行文件与匹配变量如何处理换行

Perl 正则表达式多行匹配没有点

perl多个正则表达式匹配多行

perl 正则表达式 模糊匹配

PHP正则表达式基本函数

正则表达式匹配换行