多行搜索和替换

时间:2015-11-17 07:47:31

标签: perl

$behivott = Sorszam::find()->with('ablak')
            ->orderBy(['behivas_datum' => SORT_DESC])
            ->limit(1)
            ->all();
        $sorszamok = Sorszam::find()->with('ablak')
            ->orderBy(['behivas_datum' => SORT_DESC])
            ->andWhere(['>', 'behivas_datum', 'nyomtatas_datum'])
            ->limit(4)
            ->offset(1)
            ->all();

        $reklam = Reklam::find()->all();
        return $this->render('generatePage', [
            'sorszamok' => $sorszamok,
            'reklam'    => $reklam,
            'behivott'  => $behivott,
        ]);

如何让替换工作?

预期产出:

my $string = "<name>
                POWERDOWN_SUPPORT
              </name>
              <bool>
                <value> true </value>
              </bool>";

    if ($string=~ s/POWERDOWN_SUPPORT<\/name><bool><value>.*?<\/value>/<false>/ims) {
    print "$string\n";
    }

2 个答案:

答案 0 :(得分:1)

使用XML感知工具,使用正则表达式解析XML很难并且容易出错。

例如,xshXML::LibXML的包装:

open file.xml ;
my $v = //name[normalize-space(.)='POWERDOWN_SUPPORT']/following-sibling::bool/value[normalize-space(.)='true'];
set $v/text() 'false' ;
save :b ;

答案 1 :(得分:1)

这可能有效:

s/(POWERDOWN_SUPPORT\s*?<\/name>\s*?<bool>\s*?<value>).*?(<\/value>)/$1 false $2/s