Регулярное выражение для @ Array в Perl - PullRequest
0 голосов
/ 11 мая 2011

На самом деле я использую один 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 "$revcut\n";
            $revcut1=substr($revcut,index($revcut,'#')+1,length($revcut));
        }
    }
    push(@issue,$revcut1);

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

Ответы [ 3 ]

1 голос
/ 11 мая 2011

Вы можете сделать это так:

echo "[I#1303350], [I#1270918],[I#1312521]" | perl -lnwe "print for m/#(\d+)/g"
1 голос
/ 11 мая 2011

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

use warnings;
use strict;

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

__END__

1312588,1303350,1270918,1312521
0 голосов
/ 11 мая 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...