我一直在编写一个脚本以从一些文档中提取有用的命令,并且在在线搜索并使用一些示例之后,似乎仍然无法让正则表达式正常工作。输入文件将是一个word doc,我需要提取一些我可以正常工作的基本标题信息以及两组开始和结束标签之间的所有文本,这些标签可以跨越多行并出现多次。下面是我拥有的代码,它正确地提取了标题详细信息,但似乎不匹配,以及通过文档的命令标题。
open(DAT,'<input') or die "$!";
$file = do{local $/; <DAT>};
close(DAT);
open (FH2, '>>', 'out.txt') or die "$!";
my @matches = $file =~ m/(\[$source\]|\[$target\]|\[admin\]|<IA%COMMAND>.*? <\/IA%COMMAND>|<IA%UICOMMAND>.*?<\/IA%UICOMMAND>)/g;
print FH2 @matches;
close (DAT);
close (FH2);
输入文件是一个 word doc,其格式类似于:
random overhead
[source]
<IA%COMMAND>stuff to print </IA%COMMAND>
stuff that should be ignored
[target]
<IA%UICOMMAND>other stuff to print</IA%UICOMMAND>
stuff to be ignored
[target]
<IA%COMMAND>print out this too
and this as well </IA%COMMAND>
这应该导致输出:
[source]
<IA%COMMAND>stuff to print </IA%COMMAND>
[target]
<IA%UICOMMAND>other stuff to print</IA%UICOMMAND>
[target]
<IA%COMMAND>print out this too
and this as well </IA%COMMAND>
我将其分解为仅搜索匹配良好但似乎对 .* 不满意的打开和关闭标签 对标签之间的内容进行非贪婪匹配。任何意见,将不胜感激。