2010-04-03 95 views
3

假设我有一个字符串04032010. 我希望它是04/03/2010。我将如何插入正则表达式的斜杠?插入正则表达式来格式化日期(Perl)

+2

正如一个方面说明,这被认为是第四行军,或第三四月的?我总是会转换为yyyy-mm-dd格式(ISO 8601)进行消歧。 – Svante 2010-04-03 22:08:12

回答

3

好了,正则表达式匹配正好,但你可以尝试这样的事: 小号/(..)(..)(..)/$ 1/$ 2/$ 3/

#!/usr/bin/perl 

$var = "04032010"; 
$var =~ s/(..)(..)(....)/$1\/$2\/$3/; 
print $var, "\n"; 

厂对我来说:

$ perl perltest 
04/03/2010 
2

我总是喜欢使用不同的分隔符,如果/参与,所以我会去

s| (\d\d) (\d\d) |$1/$2/|x ; 
4

要使用正则表达式做到这一点,请尝试以下操作:

my $var = "04032010"; 
$var =~ s{ (\d{2}) (\d{2}) (\d{4}) }{$1/$2/$3}x; 
print $var; 

\d手段匹配单个数字。 {n}表示前面匹配的字符n次。结合你得到\d{2}匹配两个数字或\d{4}匹配四位数字。通过围绕括号中的每个集合,匹配将被存储在变量中,$1, $2, $3等等。

一些先前的答案使用.来匹配,这不是一件好事,因为它可以匹配任何字符。我们在这里建立的那个在接受的内容上要严格得多。

你会注意到我在正则表达式中使用了额外的空格,我用x修饰符来告诉引擎忽略我的正则表达式中的空格。使正则表达式更具可读性会很有帮助。

比较s{(\d{2})(\d{2})(\d{4})}{$1/$2/$3}x; VS s{ (\d{2}) (\d{2}) (\d{4}) }{$1/$2/$3}x;

+0

+1用于避免过度使用。 – 2010-04-04 22:12:02