我的日志文件包含以下内容:
(8092) "DEFECT_AUDIT_INTTEST_FRI_JAN_02_2015_07_05_09" (3 of 4)
(7992) ---$ FirstName1 Surname1 "Comment number 1" 02-Jan-2015 01:53 AM
(8007) ---$ FirstName2 Surname2 "Comment number 2" 19-Dec-2014 06:20 AM
(7994) ---$ FirstName3 Surname3 "Comment number 3" 19-Dec-2014 06:46 AM
我想阅读每个文件并存储符合以下标准的内容,即 一个。线有--- 湾内容从---开始,后跟特殊字符$和空格。例如。 这里我想要的数组大小为3并具有以下内容: FirstName1 Surname1"评论编号1" 02-Jan-2015 01:53 AM FirstName2 Surname2"评论编号2" 2014年12月19日上午06:20 FirstName3 Surname3"评论编号3" 2014年12月19日上午06:46 我目前的代码是:
if($_ =~/---$/){
my ($CsDescription) = /"---$ "/;
push @CSArray , $CsDescription;
}
答案 0 :(得分:1)
......以下元字符具有[特殊]含义:
\ Quote the next metacharacter
^ Match the beginning of the line
. Match any character (except newline)
$ Match the end of the string (or before newline at the end
of the string)
| Alternation
() Grouping
[] Bracketed Character class
http://perldoc.perl.org/perlre.html
括号中的特殊字符类 大多数人物 这是正则表达式中的元字符(即字符 带有特殊含义的。,*或()会失去特殊的意义 意义并且可以在角色类中使用而无需使用 逃避他们。例如,[()]匹配左括号, 或一个右括号,以及字符类中的parens 不要分组或捕获。
在角色类中可能具有特殊含义的角色 是:\,^, - ,[和],并在下面讨论。他们可以逃脱 反斜杠,虽然有时不需要,在这种情况下 反斜杠可以省略。
http://perldoc.perl.org/perlrecharclass.html#Bracketed-Character-Classes
use strict;
use warnings;
use 5.016;
my @lines;
my $regex = qr{
.*? #Match any character, 0 or more times, non-greedy, followed by...
-{3} #a dash, 3 times, followed by...
\$ #a dollar sign, followed by...
[ ] #a space, followed by...
(.*) #any character, 0 or more times, captured in $1
}xms;
for my $line (<DATA>) {
if ($line =~ $regex) {
push @lines, $1;
}
}
print for @lines;
__DATA__
(8092) "DEFECT_AUDIT_INTTEST_FRI_JAN_02_2015_07_05_09" (3 of 4)
(7992) ---$ FirstName1 Surname1 "Comment number 1" 02-Jan-2015 01:53 AM
(8007) ---$ FirstName2 Surname2 "Comment number 2" 19-Dec-2014 06:20 AM
(7994) ---$ FirstName3 Surname3 "Comment number 3" 19-Dec-2014 06:46 AM
输出:
FirstName1 Surname1 "Comment number 1" 02-Jan-2015 01:53 AM
FirstName2 Surname2 "Comment number 2" 19-Dec-2014 06:20 AM
FirstName3 Surname3 "Comment number 3" 19-Dec-2014 06:46 AM
大多数在正则表达式中为元字符的字符(即带有特殊含义的字符,如。,*或()会失去其特殊含义,并且可以在字符类中使用而无需转义它们。实例,[()]匹配左括号或右括号,并且字符类中的parens不会分组或捕获。
在字符类中可能带有特殊含义的字符是:\,^, - ,[和],并在下面讨论。它们可以使用反斜杠进行转义,但有时不需要,在这种情况下可以省略反斜杠。
http://perldoc.perl.org/perlrecharclass.html#Bracketed-Character-Classes
什么关于$ ??!
答案 1 :(得分:0)
您可以将$
视为文字,因为您使用$
perl作为行尾
并删除内容,直到找到$
符号
if(/---\$/){
my $CsDescription=$_;
$CsDescription =~s/.*\$// ;
push @CSArray , $CsDescription;
}
print "@CSArray" ;
输出
FirstName1 Surname1 "Comment number 1" 02-Jan-2015 01:53 AM
FirstName2 Surname2 "Comment number 2" 19-Dec-2014 06:20 AM
FirstName3 Surname3 "Comment number 3" 19-Dec-2014 06:46 AM