Regex perl正则表达式提取

Regex perl正则表达式提取,regex,perl,Regex,Perl,如何使用正则表达式提取此字符串 ||03/15/2012||10:17:11|FOR TEST 我想摘录2012年3月15日。我试过这个命令 my $firstLine =~ m/^\|\|\d{2}\/\d{2}\/\d{4}\|\|/i ; trace("first line extraction : $firstLine first $1"); 它不起作用。你能帮忙吗 谢谢您需要在要提取的零件周围使用捕获组: 我的$line=“| | 03/15/2012 | | | 10:17:11

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

||03/15/2012||10:17:11|FOR TEST
我想摘录2012年3月15日。我试过这个命令

my $firstLine =~ m/^\|\|\d{2}\/\d{2}\/\d{4}\|\|/i ;
trace("first line extraction : $firstLine first $1");
它不起作用。你能帮忙吗


谢谢

您需要在要提取的零件周围使用捕获组:

我的$line=“| | 03/15/2012 | | | 10:17:11 |用于测试”; 如果$line=~m/^\\\\\\\\d{2}\/\d{2}\/\d{4}\\\\\\/i{ 捕获组┴───────────────────┘ 打印组1:$1\n;2012年3月15日 }
您需要在要提取的零件周围使用捕获组:

我的$line=“| | 03/15/2012 | | | 10:17:11 |用于测试”; 如果$line=~m/^\\\\\\\\d{2}\/\d{2}\/\d{4}\\\\\\/i{ 捕获组┴───────────────────┘ 打印组1:$1\n;2012年3月15日 } 试试看:我的$firstLine=~m/^\\\\\\\\\\\\\\\\\\\\\\\\\\\\.*$/i

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

试试:my$firstLine=~m/^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\.*$/i

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

脚本:

输出:

在此处测试此代码:

脚本:

输出:


在此处测试此代码:

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

my $in = "||03/15/2012||10:17:11|FOR TEST";
(my $Date) = $in =~ /^\|\|(\d{2}\/\d{2}\/\d{4})\|\|/;
您将在$Date中找到捕获组1的结果


顺便说一句,您不需要修饰符i,因为这会使字母匹配不区分大小写,因为您的正则表达式中并没有字母,所以此选项是无用的。

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

my $in = "||03/15/2012||10:17:11|FOR TEST";
(my $Date) = $in =~ /^\|\|(\d{2}\/\d{2}\/\d{4})\|\|/;
您将在$Date中找到捕获组1的结果


顺便说一句,您不需要修饰符i,因为这会使字母匹配不区分大小写,因为您的正则表达式中没有字母,所以此选项是无用的。

如果行总是以| |开始,后跟日期,那么您可以将正则表达式/\d{2}\/\d{2}\/\d{4}替换为:/^\{2}\d{2}/\d{4}/。如果行始终以| |开头,后跟日期,则可以将regex/\d{2}\/\d{2}\/\d{4}/替换为以下内容:/^\{2}\d{2}\/\d{2}\/\d{4}/.正确。但是为什么我不能做作业,比如我的$data=$1correct。但是为什么我不能做作业,比如我的$data=$1
my $in = "||03/15/2012||10:17:11|FOR TEST";
(my $Date) = $in =~ /^\|\|(\d{2}\/\d{2}\/\d{4})\|\|/;