Регулярное выражение для @ Array в Perl

#perl

#perl

Вопрос:

На самом деле я использую один perl-скрипт для подготовки Readme txt для моих сборок. в этом скрипте я использовал

 foreach $line (<LOG>) 
{   
    if(length(trim($line))>0)
    {
    $line=trim($line);
    $line=~ s/[r]//gs;
    if(rindex($line,'#')!=-1)
    {
    $icut=substr($line,0,index($line,']'));
    $icut2=substr($icut,index($icut,'#') 1,length($icut));
    }
    push(@issue,$icut2);
  

это выборка правильной проблемы, но когда ситуация становится такой

 [I#1303350], [I#1270918],[I#1312521] Updated Physical Confirmation Template based on CO
  

тогда он выдает только одну проблему, нет, не все проблемы в той же строке. итак, я изменил свой код следующим образом

 foreach $revno(<REV>)
{
    if(length(trim($revno))>0)
    {
        $revno=trim($revno);
        $revno=~ s/[r]//gs;
        if(rindex($revno,'#')!=-1)
        {
            $revcut=substr($revno,0,rindex($revno,']'));
            print "$revcutn";
            $revcut1=substr($revcut,index($revcut,'#') 1,length($revcut));
        }
    }
    push(@issue,$revcut1);
  

теперь оно извлекает все, ревизии нет, но вывод выглядит так, 1312588,1303350], [I#1270918],[I#1312521 но я хочу удалить # [ ] I только, но не , поэтому, пожалуйста, скажите мне, как я могу проанализировать это с помощью регулярного выражения.

Комментарии:

1. короче говоря, мой вопрос в том, как я могу разобрать 1312588,1303350], [I#1270918],[I#1312521 на 1312588,1303350,1270918,1312521

Ответ №1:

Это можно сделать без регулярных выражений: Транслитерировать: tr///

 use warnings;
use strict;

my $s = '1312588,1303350], [I#1270918],[I#1312521';
$s =~ tr/ ][#I//d;
print "$sn";

__END__

1312588,1303350,1270918,1312521
  

Ответ №2:

Вы можете сделать это следующим образом:

 echo "[I#1303350], [I#1270918],[I#1312521]" | perl -lnwe "print for m/#(d )/g"
  

Комментарии:

1. Это не сохраняет запятые, как запрашивал OP.

2. Таким образом, он может вытащить join оператор и объединить их.

Ответ №3:

Это работает для меня:

  my @issues = $line_of_data =~ m/#(d )/g;
  

И если вам нужны запятые, это сделать намного проще:

 my $with_commas = join( ', ', @issues );
  

И у вас все еще есть номера отдельных проблем в виде «атомов» данных.