Regex 如何开始匹配并从文本中的确切点保存匹配
我有一个文本,我用正则表达式和perl为它编写了一个解析器 我可以用两个空行匹配我需要的内容(我使用regexp),因为有一种模式允许在两个空行之后识别文本块 但问题是,整篇文章都有引言部分,最后还有一些我不需要的文章 下面是一个代码,当它找到两个空行时,它与文本匹配Regex 如何开始匹配并从文本中的确切点保存匹配,regex,perl,matching,Regex,Perl,Matching,我有一个文本,我用正则表达式和perl为它编写了一个解析器 我可以用两个空行匹配我需要的内容(我使用regexp),因为有一种模式允许在两个空行之后识别文本块 但问题是,整篇文章都有引言部分,最后还有一些我不需要的文章 下面是一个代码,当它找到两个空行时,它与文本匹配 #!/usr/bin/perl use strict; use warnings; my $file = 'first'; open(my $fh, '<', $file);
#!/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,'这是一篇相关的文章,我会把文件弄脏,然后匹配块。这样你就不必再搞一些有点难看的行计数了也许你是对的,但我更喜欢用一些代码来做