如何在Perl中使用前后检查?

时间:2017-11-22 07:09:01

标签: perl

我们有一个*.Tex文件包含很多表,并且在表中有一个关键字,我们必须获取具有关键字的表。

对于关键字例如:\\tobesplit

输入文件:

\begin{table1} ....\body1 .... \tbody1 .... \end{table1}
some text ... 
\begin{table2} .... \body2 .... \\tobesplit ... \tbody2... \end{table2}
some text ...
\begin{table3} ....\body3... \tbody3... \end{table3}
some text ...

代码:

my ($tpre,$tmatchs,$tposts) = "";
while($incnt=~m/\\tobesplit/gs)
{
    $tpre = $tpre.$`; $tmatchs = $&; $tposts = $';
    print "hi...\n";
    my ($headers,$footers) = "";
  

这里我们需要从开始

获取表2的预先内容
    if($tpre=~m/(?<!.*\\begin\{table)\\body\d+/g) {  $headers = $&; }
  

在这里,我们需要将表2的后内容添加到结束

    if($tposts=~m/\\tbody(.*?)\\end\{table\d+\}/i) {  $footers = $&; }
    print "-$headers-\n";
    print "-$footers-\n";
}
  

注意:table123的数字仅用于识别目的......

我不知道如何在perl中使用lookbehind和lookafter函数的pre和post。能不能请有人帮我这个。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您正在考虑使用语法,

Pegex非常有用。它为Perl5提供了基本的Perl6样式语法分析的一大块。 Pegex是一个优秀且未充分利用的模块。