首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Perl中的正则表达式

Perl中的正则表达式
EN

Stack Overflow用户
提问于 2014-01-07 10:34:54
回答 2查看 72关注 0票数 2

我试图编写一个正则表达式来匹配一个特定的行,并在它下面的行上执行操作。读取文件a.txt a.txt的内容

代码语言:javascript
运行
复制
I am from Melbourne .

Aussie rocks   #The text can be anything below the first line

我正在编写一个正则表达式来读取文件a.txt,并试图替换line 1下面的文本。片段:-

代码语言:javascript
运行
复制
open($fh,"a.txt") or die "cannot open:$!\n";
while(<$fh>){
 if($_=~/^I am from\s+.*/){
   #I have to replace the line below it .
}

有人能帮帮我吗。我只需要replace a line below the line that matches my regex with an empty line or anything$line =~ s/<Line below line1>//;。我怎么能这么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-07 10:46:34

有很多种方法。

阅读循环中的下一行:

代码语言:javascript
运行
复制
while (<$fh>) {
  print;
  if (/^I am from/) {
    <$fh> // die "Expected line";  # discard next line
    print "Foo Blargh\n";          # output something else
  }
}

这是我最喜欢的解决方案。

使用旗子:

代码语言:javascript
运行
复制
my $replace = 0;
while (<$fh>) {
  if ($replace) {
    print "Foo Blargh\n";
    $replace = 0;
  }
  else {
    print;
    $replace = 1 if /^I am from/;
  }
}

把所有的输入都说出来:

代码语言:javascript
运行
复制
my $contents = do { local $/; <$fh> };
$contents =~ s/^I am from.*\ņ\K.*/Foo Blargh/m;
print $contents;

这个regex需要一个解释:^/m下的行开始匹配。.*\n与行的其余部分匹配。\K在匹配的子字符串中不包括前面的模式。.*匹配下一行,然后由Foo Blargh替换。

票数 1
EN

Stack Overflow用户

发布于 2014-01-07 10:40:10

代码语言:javascript
运行
复制
open(my $fh, "<", "a.txt") or die $!;

my $replace;
while(<$fh>){
  $_ = "\n" if $replace;
  $replace = /^I am from.*/;
  print;
}

或者一次读取文件,

代码语言:javascript
运行
复制
open(my $fh, "<", "a.txt") or die $!;
my $str = do { local $/; <$fh> };

$str =~ s/^I am from.*\n \K .*//xm;
print $str;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20969374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档