删除比赛前后的所有内容

时间:2014-11-06 11:12:59

标签: regex perl

我已经进行了搜索和搜索,但没有任何功能完全符合我的需要。

到目前为止,我的脚本正在做所有事情;输入文本文件,这是一行长的字符。该脚本要求用户输入第一个输入,然后输入第二个输入。我试图让脚本删除第一个输入之前和第二个输入之后的所有字符。我不想删除匹配的输入本身。

e.g。如果文件包含" 1111111111111111111111111CAT1111DOG11111111111",则用户键入" CAT"第一次输入和" DOG"对于第二个输入,我想完成" CAT1111DOG"。

我不需要输入和输出等方面的帮助。它只是使用我的$line字符串。如何在第一个输入变量之前和第二个输入变量之后删除所有内容,但不删除这些匹配项?也许是正则表达式解决方案?顺便提一下,在文件中找到的输入变量可能并不总是相同的长度。

2 个答案:

答案 0 :(得分:1)

您可以按照以下方式执行此操作:

$one = $ARGV[0] || "CAT" ;
$two = $ARGV[1] || "DOG" ;
$str = $ARGV[2] || '1111111111111111111111111CAT1111DOG11111111111';

$abc;

# This version will capture the match to a new variable
if ($str =~ m/($one.*$two)/) {
  print "$1\n";
  $abc = $1;
}

# This version will replace the original string with the match
$str =~ s/.*($one.*$two).*/$1/;
print "$abc\n$str\n";

如果保存文件,则可以输入位置参数作为用户输入。

答案 1 :(得分:0)

这可以满足您的期望。

use warnings;
use strict;
my @data = <DATA>;
print "Enter ther first value: ";
chomp (my $first =<>) ;
print "Enter the second value: ";
chomp (my $sec = <>);
my @ar =map{m/$first.*$sec/gi} @data; #simply do it
print "@ar\n";
__DATA__
1111111111111111111111111CAT1111DOG11111111111

我使用map函数来匹配数据开始和结束。 .这匹配任何期望换行的内容,然后*匹配零次或多次。