Perl 字符串解析多种模式

Perl String parsing multiple patterns

我正在尝试解析具有多个模式的文本文件。 目标是让所有东西都在 * * 之间,只有整数在 ^ ^ 如果找到,它应该删除所有特殊字符或字符串。

data.txt

*ABC-13077* ^817266, 55555^
*BCD-13092* ^CL: 816933^
*CDE-13127* ^  ===>   Change 767666 submitted^

output.txt

ABC-13077 817266 55555
BCD-13092 816933
CDE-13127 767666

我的脚本

#!/usr/bin/perl
use strict;
use Cwd;
my $var;

open(FH,"changelists.txt")or die("can't open file:$!");
while($var=<FH>)
{
    my @vareach=split(/[* \s\^]+/,$var);
    for my $each(@vareach)
    {
        print "$each\n";
    }
}

将 while 循环替换为以下内容:

while (<FH>) {
    s/\*(.*)\*//;
    s/\^(.*)\^/ join ' ',  =~ m([0-9]+)g /e;
    print;
}

第一个替换删除了星号。

第二次替换取 ^...^ 部分,由于 /e 修饰符,将其替换为替换部分中代码的结果。该代码匹配所有整数,并且由于 join 在匹配项上强制列出上下文,它 returns 所有匹配项。