1

このファイルを使用して、フッターのスーパー プリミティブsedまたはperl置換を実行しようとしています。

通常、私は DOM を使用して HTML ファイルを解析しますが、これまでのところ、sed/perl を使用して処理している原始的な HTML ファイル (時間の問題) が原因で問題は発生していません。

必要なのは、<div id="footer">空白を含む 、別の要素を持つ要素、および終了</div><?php include 'footer.php';?>.

何らかの理由で、このパターンを まで一致させることさえできません<div id="stupid">。私は空白文字があることを知っているので、私は使用しました\s*:

perl -pe 's|<div id="footer">.*\s*.*\s*|<?php include INC_PATH . 'includes/footer.php'; ?>|' file.html | less

しかし、それは最初の行にのみ一致します。交換は次のようになります。

<?php include INC_PATH . includes/footer.php; ?> 
                   <div id="stupid"><img src="file.gif" width="206" height="252"></div>

               </div>

簡単なことを忘れているのでしょうか、それとも複数行の一致を処理するために何らかのフラグを指定する必要がありますか?

perl -vは 5.14.2 で、peフラグのみを使用しています。

4

3 に答える 3

1

おそらく-0777、perl に強制的にファイル全体を一度に読み込ませる が必要です。

perl -0777 -n -e 's|something|else|g' file

また、あなたの戦略.*\s*.*\s*はかなり脆弱です。たとえば<div id="foo"、これは単なるフラグメントです...

于 2012-05-15T19:11:39.080 に答える
0
perl -p

行単位でファイルを処理していますperl.com を参照してください

つまり、正規表現は一致するすべての行を表示することはなく、「<div id="footer">」で始まる行を取得した場合にのみ一致し、次の行では一致しなくなります。

于 2012-05-15T19:08:38.837 に答える
0

ほとんどすべての正規表現解析が行ごとに機能することを忘れていませんか?

私は常にtr改行を他の文字に変換し、正規表現の後に再び戻す必要がありました。

http://www.perlmonks.org/?node_id=17947 /m オプションを使用して、スカラーを複数行の文字列として扱うように正規表現エンジンに指示する必要がありますそうしないと、改行を越えて一致しようとしません。

于 2012-05-15T19:00:12.857 に答える