在perl的情况下,在选择行之间的部分时,在正则表达式中选择分隔符

时间:2014-05-26 12:42:05

标签: regex perl

该消息包含检测报告:

<detection_report>
Test 1
Test 2 
Test 3
</detection_report>

---------------------------------------------
Have a nice day

我想在<detection_report>标签之间选择部分,包括这两个标签。

我写了以下代码。

The message has detection report\:((.|\n|\r)+)(\<\/detection_report\>)

但它不起作用。任何人都可以帮助我。

3 个答案:

答案 0 :(得分:1)

这是一种完成工作的方法:

perl -ane 'print if /<detection_report>/ .. /<\/detection_report>/' in.txt

<强>输出:

<detection_report>
Test 1
Test 2 
Test 3
</detection_report>

答案 1 :(得分:1)

使用perl one-liner

perl -ane 'print $1 // $_ if m{(detection_report.*)} .. m{(.*?</detection_report>)}' file.txt

这与M42建议的内容很接近,但它考虑了标签不存在于自己的行上的可能性。

请注意,如果此数据是HTML或XML,则应使用实际的HTML或XML Parser来提取此数据。

答案 2 :(得分:0)

你去了:

$ cat detection.txt  
The message has detection report:

<detection_report>
Test 1
Test 2 
Test 3
</detection_report>

---------------------------------------------
Have a nice day$ cat regex.pl 
#!/usr/bin/perl

while(<>){ 
    $input.=$_
}

($body) = $input =~ m/(<.*>)/ms;

print $body
$ cat detection.txt  | perl regex.pl 
<detection_report>
Test 1
Test 2 
Test 3
</detection_report>$