1

如何使用正则表达式提取此字符串

||03/15/2012||10:17:11|FOR TEST

我想提取 "03/15/2012" 。我试过这个命令

my $firstLine =~ m/^\|\|\d{2}\/\d{2}\/\d{4}\|\|/i ;
trace("first line extraction : $firstLine first $1");

它不起作用。能否请你帮忙 ?

谢谢

4

4 回答 4

4

您需要在()要提取的部分周围使用捕获组:

my $line = '||03/15/2012||10:17:11|FOR TEST';
if ($line =~ m/^\|\|(\d{2}\/\d{2}\/\d{4})\|\|/i) {
  # Capturing group ┴───────────────────┘
  print("Group 1: $1\n"); # 03/15/2012
}
于 2012-04-18T19:46:41.767 回答
1

您可以像这样直接分配捕获组的值:

my $in = "||03/15/2012||10:17:11|FOR TEST";
(my $Date) = $in =~ /^\|\|(\d{2}\/\d{2}\/\d{4})\|\|/;

您将在$Date.

顺便提一句。你不需要修饰符i,因为这使得匹配的字母不区分大小写,因为你的正则表达式中没有字母,这个选项是没用的。

于 2012-04-18T20:36:20.953 回答
0

尝试:my $firstLine =~m/^\|\|(.+)\|\|.*$/i

您只真正关心前两组双管之间的内容

于 2012-04-18T19:50:14.330 回答
0

脚本

my $firstLine = '||03/15/2012||10:17:11|FOR TEST';
print $1 if $firstLine =~ /(\d{2}\/\d{2}\/\d{4})/;

输出:

03/15/2012

在此处测试此代码:http: //ideone.com/99iUg

于 2012-04-18T19:53:43.637 回答