2014-03-04 37 views

回答

2

你可以试试,

open my $fh, "<", "file" or die $!; 
while (my $line = <$fh>) { 
    $line =~ s/^[-X]+ | [-X]+(?=\s*$)//xg; 
    print $line; 
} 
close $fh; 

或CMD线,

perl -pe 's/^[-X]+ | [-X]+(?=\s*$)//xg' file 
+0

你能帮我一个关于如何使用'$ line =〜s/^ [ - X] + | [-X] + $ // XG;”一个简单的例子将是非常有益 – user3318563

+0

它给我的结果作为 “A AXXXXXXD AXXD d A” 我只希望有起始点为d和结束点为A或提取字符串反之亦然。我不希望结果包括单个D或A的。 – user3318563

+0

同样的问题再次..我仍然得到单身的D和A,以及IAM寻找的实际输出。 – user3318563

2

测试代码:

my @a = qw[ 
    X-X-D-X-X-A 
    X-D-X-A-X 
    D-X-X-X-X-A-X-X 
]; 

for my $a (@a) { 
    if ($a =~ /(D[-X]+A)/) { 
    print $1,"\n"; 
    } 
} 
+0

我假设硬编码模式,因为不需要'$ s' ....数据可能是动态的! :) – NoobEditor

+0

只是一个例子! – Pradeep

0
perl -lne 'print $1 if(/[^D]*(D.*A).*/)' 

test

一个脚本中在读入文件:

while (my $line = <$fh>) { 
    $line =~ m/[^D]*(D.*A).*/g; 
    print $1; 
} 

正则表达式:

[^D]*(D.*A).*

  1. [^D]*线可能无法与d开始
  2. (D.*A)捕捉(圆括号)从d盯着直到 行中的最后一个A为止。捕获的部分将存储在$ 1中
  3. .*留在字符串中。
+0

您好维纳,请您为上述答案提供一个简短的代码。我对编程相当陌生,不能直接实现上述答案。 – user3318563

+0

请检查我的编辑。 – Vijay

+0

如何从txt文件获取输入时使用此代码? – user3318563