【发布时间】:2017-02-01 00:59:25
【问题描述】:
过去,我已经能够使用触发器来提取具有不同 START 和 END 的文本。
这次我在尝试提取文本时遇到了很多麻烦,因为我的源文件中没有不同的分隔符,因为触发器的 START 和 END 是相同的。我希望触发器在年份为 yyyy 的行中启动并继续将$_ 推送到数组,直到另一行开始 yyyy。
触发器的问题是它会在我的下一个 START 时为假。
while (<SOURCEFILE>) {
print if (/^2017/ ... /^2017/)
}
对给定的源数据使用上述内容将错过我还需要匹配的文件的第二个多行部分。也许我认为是解析多行文件的最佳方法的触发器在这种情况下不起作用?我想要做的是从以日期开头的第一行开始匹配并继续匹配,直到以日期开头的下一行之前的行。
样本数据是:
2017 message 1
Text
Text
Text
2017 message 2
more text
more text
more text
2017 message 3
yet more text
yet more text
yet more text
但我得到了:
2017 message 1
Text
Text
Text
2017 message 2
2017 message 3
yet more text
yet more text
yet more text
...缺少消息 2 内容..
我不能在源数据中依赖空格或不同的 END 分隔符。
我想要的是打印每条消息(实际上是push @myarray, $_ & 然后测试匹配),但是这里我缺少消息 2 下面的行,因为触发器设置为 false。有什么方法可以用触发器来处理这个问题,还是我需要使用其他东西?
提前感谢任何可以提供帮助/建议的人。
【问题讨论】:
-
我遇到了一个类似的问题,其中包含由相同 SQL 注释分隔的块的 SQL 文件。当我未能使用触发器运算符时,我最终将整个文件读入带有
perl -ne "BEGIN { $/ = undef } ..."的变量中,并使用多行正则表达式来匹配所需的块。