我想用尽可能少的代码重新安排带有Perl正则表达式的时间戳.时间戳的原始格式如下:
2011/12/29 20:19:45
Run Code Online (Sandbox Code Playgroud)
我需要做的就是将它转换为前面的年份而不是在月份/日期之后,如下所示:
12/29/2011 20:19:45
Run Code Online (Sandbox Code Playgroud)
我能够通过下面的3行代码实现这一目标.我只是想知道是否有办法用更少的代码来做到这一点.特别是我试图取消将$ 1保存到中间变量的中间行,并在正则表达式中直接指定$ 1进行第二次替换,但这导致错误:"在连接中使用未初始化的值$ 1( .)或字符串."
如果第二行无法摆脱,那么看起来这也不能归结为一行?
#my $ts = '2011/12/29 20:19:45'; #input to a subroutine
$ts =~ s/^(\d{4})\///;
my $year = $1;
$ts =~ s/ /\/$year /;
Run Code Online (Sandbox Code Playgroud)
你走了:
$ts =~ s|^(\d{4})/(\d{2})/(\d{2})(.+)$|$2/$3/$1$4|;
Run Code Online (Sandbox Code Playgroud)
请注意,上面的表达式要求时间戳的月份和日期恰好为 2位数,而年份则为4位数.但是你可以让它更短但更可靠:
$ts =~ s|^(\d+)/(\d+)/(\d+)(.+)$|$2/$3/$1$4|;
Run Code Online (Sandbox Code Playgroud)
这个将适当地处理时间戳,如1/12/98 12:34:56.
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |