Regex 如何开始匹配并从文本中的确切点保存匹配

Regex 如何开始匹配并从文本中的确切点保存匹配,regex,perl,matching,Regex,Perl,Matching,我有一个文本,我用正则表达式和perl为它编写了一个解析器 我可以用两个空行匹配我需要的内容(我使用regexp),因为有一种模式允许在两个空行之后识别文本块 但问题是,整篇文章都有引言部分,最后还有一些我不需要的文章 下面是一个代码,当它找到两个空行时,它与文本匹配 #!/usr/bin/perl use strict; use warnings; my $file = 'first'; open(my $fh, '<', $file);

我有一个文本,我用正则表达式和perl为它编写了一个解析器

我可以用两个空行匹配我需要的内容(我使用regexp),因为有一种模式允许在两个空行之后识别文本块

但问题是,整篇文章都有引言部分,最后还有一些我不需要的文章

下面是一个代码,当它找到两个空行时,它与文本匹配

#!/usr/bin/perl

use strict;
use warnings;

my $file = 'first';                    
open(my $fh, '<', $file);   
my $empty = 0;    
my $block_num = 1;    
open(OUT, '>', $block_num . '.txt');    

while (my $line = <$fh>) {  

 chomp ($line);
 if ($line =~ /^\s*$/) {  
  $empty++;      
  } elsif ($empty == 2) {     
   close(OUT);    
   open(OUT, '>', ++$block_num . '.txt');
   $empty = 0;
  } 
  else {
   $empty = 0;}
 print OUT "$line\n";

}
close(OUT);
#/usr/bin/perl
严格使用;
使用警告;
我的$file='first';
打开(my$fh,,$block_num.'.txt');
而(我的$line=){
chomp($line);
如果($line=~/^\s*$/){
$empty++;
}elsif($empty==2){
收尾;
打开(OUT,'>',+$block_num.'.txt');
$empty=0;
} 
否则{
$empty=0;}
打印出“$line\n”;
}
收尾;
这是我需要的文本示例(非常小:)



我认为我需要迭代文本,直到它找到单词LOREM IPSUM和regexps this kind“/^LOREM IPSUM/”,因为它是所需文本的起点(当我找到单词时,将文本保存在一个文件中)。 当索引词出现时,我需要完成对文本的迭代,或者将文本保存在单独的文件中

我如何实现它。我应该使用next功能继续执行行还是什么

比尔,
Yuliya

您可以将
循环更改为

my $in_lorem = 0;
while (my $line = <$fh>) {
  if( $line =~ /^LOREM IPSUM/ ) {
    $in_lorem = 1;
    next;
  }
  next unless $in_lorem;
  # your processing goes here
}
my$in\u lorem=0;
while(我的$line=){
如果($line=~/^LOREM IPSUM/){
$in_lorem=1;
下一个
}
下一步,除非以美元计价;
#你在这里处理
}
这将跳过标题行,直到您点击以
LOREM IPSUM
开头的行,然后您将处理行

在给定的行匹配之后,您可以使用类似的模式忽略所有行,除非您不必再处理任何行,所以您可以使用
last
而不是
next
。该模式留给读者作为练习。:-)

您可以使用在匹配LOREM IPSUM时开始处理,在匹配索引时停止处理

#!/usr/bin/perl
use strict;
use warnings;
use 5.010;

my $file = 'firsttest';

open (my $fh, '<', $file) or die "Failed to open $file: $!";

while (<$fh>){
    if (m/^LOREM IPSUM/ .. m/^INDEX/){
        #Do your other matching, processing, etc. here
        print;
        last if m/^INDEX/;#Optional, to avoid reading remaining lines.
    }
}
#/usr/bin/perl
严格使用;
使用警告;
使用5.010;
my$file='firsttest';

打开(我的$fh,'这是一篇相关的文章,我会把文件弄脏,然后匹配块。这样你就不必再搞一些有点难看的行计数了也许你是对的,但我更喜欢用一些代码来做