Perl正则表达式检索第一个数字

时间:2017-02-09 17:52:11

标签: regex perl

我有一个值为Validation_File_2_3.45.2017.csv的字符串。

在这种情况下如何使用正则表达式提取第一个数字2?

我已经尝试过表达式($Filedigit) = ($Filename =~ m/^[0-9]/g),但它不起作用

1 个答案:

答案 0 :(得分:0)

在评论中,你说你试过这个:

($Filedigit)= ($Filename =~ m/^[0-9]/g);

有几件事。在继续编写脚本之前,您应始终检查匹配是否成功,特别是在尝试捕获时。接下来,^从字符串的开头看,然后立即在全局范围内查找单个数字0-9。除非您有2_blah.csv这样的文件名,否则这将不匹配。但是,您实际上并没有尝试捕获任何内容,因此如果您碰巧匹配某个条目,$Filedigit将在所有情况下都为1(表示发生了匹配)。

这是一个做你想做的事的例子:

use warnings;
use strict;

my $str = 'Validation_File_2_3.45.2017.csv';

# confirm there's a match

if (my ($num) = $str =~ /^.*?(\d+)/){
    print "$num\n";
}
else {
    print "no match\n";
}

正则表达式的解释:

^   - start from beginning of string
.*? - anything, non-greedy
(   - begin capture
\d+ - any number of contiguous digit chars
)   - end capture

因此,它从字符串的开头开始,在第一组连续数字之前扔掉任何东西并捕获它们并将其放入变量中。

请参阅perlreftutperlre