Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于多个匹配的perl正则表达式_Regex_Perl - Fatal编程技术网

Regex 用于多个匹配的perl正则表达式

Regex 用于多个匹配的perl正则表达式,regex,perl,Regex,Perl,我有一个文件,其行与以下内容类似: abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1 我想保留字符串直到最后一个“:”并删除所有出现的abcd1 最后,我需要具备以下条件: abcd1::101:xyz1,xyz2,xyz3,pqrs1,xyz4 我尝试了下面的代码,但由于某些原因,它不起作用。所以请帮忙 账户名为“abcd1” 子更新组{ 我的$account=shift; my$file=“/tmp/group”; @ARGV=(

我有一个文件,其行与以下内容类似:

abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
我想保留字符串直到最后一个“:”并删除所有出现的abcd1

最后,我需要具备以下条件:

abcd1::101:xyz1,xyz2,xyz3,pqrs1,xyz4
我尝试了下面的代码,但由于某些原因,它不起作用。所以请帮忙 账户名为“abcd1”

子更新组{
我的$account=shift;
my$file=“/tmp/group”;
@ARGV=($file);
$^I=“.bak”;
而(){
#^($account::\d{1,$}:)$account、$1#g;
s/,$/;#删除最后一个“,”如果有
打印
}
}

不要为此使用正则表达式

use strict;
use warnings;

while (<DATA>) {
    chomp;
    my @parts = split(/:/, $_);
    $parts[-1] = join(',', grep { !/^abcd/ } split(/,/, $parts[-1]));
    print join(':', @parts) . "\n";
}

__DATA__
abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
abcd2::102:user1,xyz2,otheruser,abcd2,pqrs1,xyz4,abcd2

不要对此使用正则表达式

use strict;
use warnings;

while (<DATA>) {
    chomp;
    my @parts = split(/:/, $_);
    $parts[-1] = join(',', grep { !/^abcd/ } split(/,/, $parts[-1]));
    print join(':', @parts) . "\n";
}

__DATA__
abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
abcd2::102:user1,xyz2,otheruser,abcd2,pqrs1,xyz4,abcd2

split
是作业的工具,而不是
regex

因为
split
允许您可靠地将要操作的字段与不需要操作的字段分开。像这样:

#!/usr/bin/env perl
use strict;
use warnings;

my $username = 'abcd1';

while ( <DATA> ) {
   my @fields = split /:/; 
   my @users = split ( /,/, pop ( @fields ) ); 
   print join ( ":", @fields, 
               join ( ",", grep { not m/^$username$/ } @users ) ),"\n"; 
}


__DATA__
abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
#/usr/bin/env perl
严格使用;
使用警告;
我的$username='abcd1';
而(){
我的@fields=split/:/;
我的@users=split(/,/,pop(@fields));
打印联接(“:”,@字段,
加入(“,”,grep{not m/^$username$/}@users)),“\n”;
}
__资料__
abcd1::101:xyz1,用户,用户1,abcd1,pqrs1,用户blah,abcd1

split
是作业的工具,而不是
regex

因为
split
允许您可靠地将要操作的字段与不需要操作的字段分开。像这样:

#!/usr/bin/env perl
use strict;
use warnings;

my $username = 'abcd1';

while ( <DATA> ) {
   my @fields = split /:/; 
   my @users = split ( /,/, pop ( @fields ) ); 
   print join ( ":", @fields, 
               join ( ",", grep { not m/^$username$/ } @users ) ),"\n"; 
}


__DATA__
abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
#/usr/bin/env perl
严格使用;
使用警告;
我的$username='abcd1';
而(){
我的@fields=split/:/;
我的@users=split(/,/,pop(@fields));
打印联接(“:”,@字段,
加入(“,”,grep{not m/^$username$/}@users)),“\n”;
}
__资料__
abcd1::101:xyz1,用户,用户1,abcd1,pqrs1,用户blah,abcd1

谢谢大家的建议。下面的代码似乎也在做我想做的事情:while(){my($a,$b)=split(/:([^:]+)$/,$);$b=~s#$account,##g;$b=~s/,$/;print$a.:“$b}。谢谢大家的想法。下面的代码似乎也在做我想做的事情:while(){my($a,$b)=split(/:([^:]+)$/,$);$b=~s#$account;#g;$b=~s/,$/;print$a.:“$b;”