【发布时间】:2014-03-05 22:01:29
【问题描述】:
为什么以下两个正则表达式的行为不同?
$millisec = "1391613310.1";
$millisec =~ s/.*(\.\d+)?$/$1/;
对比
$millisec =~ s/\d*(\.\d+)?$/$1/;
这段代码什么也不打印:
perl -e 'my $mtime = "1391613310.1"; my $millisec = $mtime; $millisec =~ s/.*(\.\d+)?$/$1/; print "$millisec";'
虽然这会打印字符串的小数部分:
perl -e 'my $mtime = "1391613310.1"; my $millisec = $mtime; $millisec =~ s/\d*(\.\d+)?$/$1/; print "$millisec";'
【问题讨论】:
-
顺便说一句,这些不是毫秒; 0.1 秒等于 100 毫秒。
-
就不能写的更干净点吗?赶上 .1 和 1.1,虽然我不确定你想要小数还是整数。看起来像小数。所以对于所有 '/(\d+.d+)$/$1/;'我喜欢使用内存和使用 '\d' 而不是小数 '/\d+(\.\d+)$/$1/' 的 '[0-9]' ;尽管除了询问为什么它们匹配不同之外,意图有点混乱。
-
嗨,Alex - 是的,我想要小数点。你的意思是“我是如何写这篇文章的”还是“正则表达式”?你能建议更简单的正则表达式(如果是这样的话)吗? .三重奏 - 你是对的。我没有提到我稍后使用 sprintf 来追加零。