Regex 如何从Perl正则表达式中只捕获一个捕获?

Regex 如何从Perl正则表达式中只捕获一个捕获?,regex,perl,matching,Regex,Perl,Matching,除了执行以下操作外,是否有更简单的方法从匹配中仅获取一个元素: my $date = ($xml_file =~ m/(\d+)-sys_char/)[0]; # or my $date = $1 if $xml_file =~ /(\d+)-sys_char/; 是否有一个标志指定m不返回数组,而只返回所有$matches的一个串联值,所以我可以这样做: my $date = ($xml_file =~ mSOMEOPT/(\d+)-sys_char/); 正在从末尾删除0?您需要: my

除了执行以下操作外,是否有更简单的方法从匹配中仅获取一个元素:

my $date = ($xml_file =~ m/(\d+)-sys_char/)[0];
# or
my $date = $1 if $xml_file =~ /(\d+)-sys_char/;
是否有一个标志指定m不返回数组,而只返回所有$matches的一个串联值,所以我可以这样做:

my $date = ($xml_file =~ mSOMEOPT/(\d+)-sys_char/);
正在从末尾删除0?

您需要:

my ($date) = $xml_file =~ m/(\d+)-sys_char/;

if ( defined $date ) {

}
my ($date) = ($xml_file =~ m/(\d+)-sys_char/);
这将使您在$date中获得1美元。至于问题的第二部分,无法在单个变量中获得所有编号的匹配项,但可以将它们全部放入如下数组:

my @matches = ($xml_file =~ m/(\d+)-sys_char/);

这些实际上是相同的语法:当像这样的匹配的左侧是一个数组时,则返回一个包含所有子匹配的数组。第一个版本将$date生成一个单元素数组,丢弃其余的子匹配项。

请注意,第二个版本只需要我的$date=join,$xml\u file=~m/\d+-sys\u char/。