3

如何从特定数字中获取值?

可以说数字是20040819。我想得到最后两位数,即19使用 Perl。

4

9 回答 9

12
my $x = 20040819;
print $x % 100, "\n";
print substr($x, -2);
于 2010-10-01T11:19:48.990 回答
4

Benoit 的答案是正确的,我会使用它,但是为了使用您在标题中建议的模式搜索来做到这一点,您会这样做:

my $x = 20040819;
if ($x =~ /\d*(\d{2})/)
{
    $lastTwo = $1;
}
于 2010-10-01T11:23:01.767 回答
3
substr("20040819", -2); 

或者您可以使用Regexp::Common::time - 日期和时间正则表达式,例如

use strict;
use Regexp::Common qw(time);


my $str = '20040819' ;

if ($str =~ $RE{time}{YMD}{-keep})
{
  my $day = $4; # output 19

  #$1 the entire match

  #$2 the year

  #$3 the month

  #$4 the day
}
于 2010-10-01T16:00:31.727 回答
3

我将进一步说明如何将 YYYYMMDD 格式的日期提取为年、月和日期:

my $str = '20040819';
my ($year, $month, $date) = $str =~ /^(\d{4})(\d{2})(\d{2})$/;

您可以检查defined $year等,以确定匹配是否有效。

于 2010-10-01T16:04:37.857 回答
2
my $num = 20040819;
my $i = 0;
if ($num =~ m/([0-9]{2})$/) {
    $i = $1;
}
print $i;
于 2010-10-01T11:26:02.340 回答
1

另外的选择:

my $x = 20040819;
$x =~ /(\d{2})\b/;
my $last_two_digits = $1;

\b匹配单词边界。

于 2010-10-01T11:25:51.677 回答
0

为您解决方案:

my $number = 20040819;
my ($pick) = $number =~ m/(\d{2})$/;
print "$pick\n";
于 2013-12-10T07:48:39.603 回答
0

另一个解决方案:

my $number = '20040819';
my @digits = split //, $number;
print join('', splice @digits, -2, 2);
于 2010-10-01T11:51:44.263 回答
-1
$x=20040819-int(20040819/100)*100;
于 2015-10-13T21:36:00.427 回答