Regex 如何使用正则表达式从文件中提取行并在perl中推送到变量/数组
我正在寻找帮助,以提取特定的行有“开始”和“结束”关键字和 输入文件:Regex 如何使用正则表达式从文件中提取行并在perl中推送到变量/数组,regex,perl,Regex,Perl,我正在寻找帮助,以提取特定的行有“开始”和“结束”关键字和 输入文件: adfafaf adfafafas adfafaf Detail=Process Start Time : TIMESTAMP '2014-02-14 01:20:58.918757' AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD End Time : TIMESTAMP '2014-02-14 01:21:49.520818' adffffffff adf
adfafaf
adfafafas
adfafaf
Detail=Process Start Time : TIMESTAMP '2014-02-14 01:20:58.918757'
AAAAAAAA
BBBBBBBB
CCCCCCCC
DDDDDDDD
End Time : TIMESTAMP '2014-02-14 01:21:49.520818'
adffffffff
adfffff
adfff
期望输出:
移动到字符串/数组时需要以下行
Detail=Process Start Time : TIMESTAMP '2014-02-14 01:20:58.918757'
AAAAAAAA
BBBBBBBB
CCCCCCCC
DDDDDDDD
End Time : TIMESTAMP '2014-02-14 01:21:49.520818'
这是你的台词
if ($subject =~ m/^[^\n]*?Start.*?End[^\n]+/sm) {$result = $&;}
它是点全部模式,因此
*
可以在多行上匹配。要在最后一行结束时停止,我们使用匹配除换行符以外的所有字符的[^\n]+
。只需逐行迭代文件,当一行匹配时,将其推送到数组中(或者使用它执行任何操作)?大约需要5行代码@array=eval('sub{grep/Start/。/End/,@}')->(
另请参见@ysth,这与@array=grep/Start/。/End/,
有什么不同?@ikegami:如果您只运行一次,或者从来没有一个开始没有您想要的结束[^\n]
而不是第一个(或在任何地方使用
,但在中间使用(?s:.*)
)