2009-11-30 27 views
0

是否有只有一个元素抢出来比做followng其他比赛更简单的方法:如何从Perl正则表达式中只抓取一个捕获?

my $date = ($xml_file =~ m/(\d+)-sys_char/)[0]; 
# or 
my $date = $1 if $xml_file =~ /(\d+)-sys_char/; 

是否有指定M不返回数组,但所有的只是一个连结值标志$#匹配,所以我可以这样做:?

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

从结尾删除0?

回答

8

你想:

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

这将让你在$date$1。至于你的问题的第二部分,有没有办法让所有的编号匹配的单一变量,但你可以让他们都变成一个这样的数组:

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

这些其实都是相同的语法:当像这样匹配的左手边是一个数组时,则返回包含所有子匹配的数组。第一个版本使($date)成为一个单元数组,抛弃其余的子比赛。

+0

啊,我明白了,只需要()周围我的$日期,thx。 – user105033 2009-11-30 22:14:31

+0

请注意,第二部分只需要'my $ date = join'',$ xml_file =〜m /(\ d +) - sys_char /'。 – darch 2009-11-30 23:37:31

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

if (defined $date) { 

}