Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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中输入if语句吗?_Regex_Perl - Fatal编程技术网

Regex 我可以使用正则表达式在perl中输入if语句吗?

Regex 我可以使用正则表达式在perl中输入if语句吗?,regex,perl,Regex,Perl,我正在解析一个/etc/passwd文件,以提取文件中每个人的用户名和姓。我可以使用正则表达式进入if语句吗?下面是我试图匹配的一条线的示例: $parameter = cvwalters:*:14608:140608:Chris V. Walters,N/A,N/A,N/A:/home/cvwalters:/bin/bash if ($parameter =~ /(.+):(.+):(.+):(.+):(.+),(.+),(.+),(.+):(.+):(.+)/){ my $uid

我正在解析一个/etc/passwd文件,以提取文件中每个人的用户名和姓。我可以使用正则表达式进入if语句吗?下面是我试图匹配的一条线的示例:

$parameter = cvwalters:*:14608:140608:Chris V. Walters,N/A,N/A,N/A:/home/cvwalters:/bin/bash

if ($parameter =~ /(.+):(.+):(.+):(.+):(.+),(.+),(.+),(.+):(.+):(.+)/){
    my $uid =$1;
    my $fname = $5 =~ /^\W+/;
    my $lname = $5 =~ /\W+$/;
    push (@results, $uid, $fname, $lname);
}

perl是否在if语句中返回一个真正的布尔值,并允许执行其余语句?如果没有,我如何实现这一点?

是的,在布尔上下文中,匹配运算符是布尔运算符

但是请接受@squiguy的建议,使用split

CPAN上甚至有一个passwd模块


所以这将是一个更好的选择,然后我选择它

$parameter = cvwalters:*:14608:140608:Chris V. Walters,N/A,N/A,N/A:/home/cvwalters:/bin/bash

my ($uid, $junk, $junk2, $junk3, $name, $junk4, $junk5) = split /:/, $parameter;

my $fname = $name =~ /^\w+/;
my $lname = $name =~ /\w+$/;

push (@results, $uid, $fname, $lname);
请尝试以下代码:

my $var = "cvwalters:*:14608:140608:Chris V. Walters,N/A,N/A,N/A:/home/cvwalters:/bin/bash";
my @arr = split /[:,]/, $var;
my $uid = $arr[0];
my ($fname) = $arr[4] =~ /^(\w+)/;
my ($lname) = $arr[4] =~ /(\w+)$/;
push(@results,$uid,$fname,$lname);

如果在冒号上拆分,您会更高兴。因此问题是
m/
运算符在布尔上下文中是否返回布尔真/假?这包括在(或任何安装了Perl的系统上,
perldoc perlop
split/[,:]/,$parameter
,或
$parameter=~/([^:,]+)/g
除了像squiguy建议的那样在冒号上拆分外,还可以工作。不能使用模块,这是用于赋值。
my($uid,unde,unde,unde,$name)=split/:/,$参数-不需要那些
$junk
变量。