+ -
当前位置:首页 → 问答吧 → 关于正则表达式的问题

关于正则表达式的问题

时间:2011-07-28

来源:互联网

有这样一段文本:
data demog;
.........
run;
proc data=demog;
.........
run;
data ecg;
.........
run;
data pk;
.........
output;
run;
我想写一段程序输出含有output的那一段data...run;文本,这是我写的正则:
/(^(data).*?(.*?\s*output;?){1,}.*(run;)$)/xsgm
但是却将上面的整段文字都输出来了。

为了避免这种情况,我想把文本中含有data...run;的每一段文本都分离出来,然后在这些文本中输出含有output的那一段文本,但是不知道怎么实现,希望各位高手能给些建议。谢谢了。

作者: potato1234   发布时间: 2011-07-28

看一下这段程序能不能帮到你?
Perl code

#!/usr/bin/perl

open FH, "<test.txt" or die "$!\n";
$lines = join("\n", <FH>);
while ($lines =~ m/(data.*?run;)/sg) {
    $part = $1;
    while ($part =~ m/(output.*)/g) {
        print "$1\n";
    }
}

作者: longhuahuang   发布时间: 2011-07-28

好的。我试一下。谢谢
引用 1 楼 longhuahuang 的回复:

看一下这段程序能不能帮到你?
Perl code

#!/usr/bin/perl

open FH, "<test.txt" or die "$!\n";
$lines = join("\n", <FH>);
while ($lines =~ m/(data.*?run;)/sg) {
$part = $1;
while ($part =~ m/(output.*)/g) ……

作者: potato1234   发布时间: 2011-07-28

我调试了,输出的是output.我想输出的是这个结果
data pk;
.........
output;
run; 
谢谢您的答复
引用 1 楼 longhuahuang 的回复:

看一下这段程序能不能帮到你?
Perl code

#!/usr/bin/perl

open FH, "<test.txt" or die "$!\n";
$lines = join("\n", <FH>);
while ($lines =~ m/(data.*?run;)/sg) {
$part = $1;
while ($part =~ m/(output.*)/g) ……

作者: potato1234   发布时间: 2011-07-28

Perl code

#!/usr/bin/perl

open FH, "<test.txt" or die "$!\n";
$lines = join("\n", <FH>);
while ($lines =~ m/(data.*?run;)/sg) {
    print "$1\n";
}

作者: longhuahuang   发布时间: 2011-07-28

我以为你只想输出output那一行呢。
Perl code

#!/usr/bin/perl

open FH, "<test.txt" or die "$!\n";
$lines = join("", <FH>);
while ($lines =~ m/(data.*?run;)/sg) {
    $part = $1;
    if ($part =~ m/output;/sg) {
        print "$part\n";
    }
}

作者: longhuahuang   发布时间: 2011-07-28

谢谢您的答复。

作者: potato1234   发布时间: 2011-07-28