2009-08-11 10 views
1

Webページのセットを新しいシステムにアップグレードしていて、各ページの上部にある定型文を削除して置き換え、新しい定型文と置き換えたいと思います。幸いにも、各ページにはコンテンツテーブルがあり、その前にはテーブルはありません。私は次のようなことをしたい:HTML文書からテーブルを削除するにはどうすればよいですか?

$contents =~ s/^.*<table/$newHeader/ 

これは、$ contentsの最初の行でのみ動作します。ファイル内の最初の<テーブルを新しいボイラープレートに置き換える前にすべてを置き換える方法はありますか?

答えて

7

あなたは「.は」改行(単一の巨大な行として代わりあたりの行の文字列との契約)を含むすべて文字と一致していること、それを伝えるPerlの「/s」オプションを使用することができます。あなたは*を非貪欲にするために?数量詞を用いて第1のテーブルにマッチを制限:

$contents =~ s/^.*?<table/$newHeader/s 

また、ちょうどあなたが行う必要がありますので、交換は、テキスト「<table」を取り除くになることを覚えておいてくださいそれは多分に、何とかして戻って挿入されることを確認してください:

$contents =~ s/^.*?<table/<table$newHeader/s 

それともが、テキストで「一致、この表現も一致している必要があり、次の」言いゼロ幅の正の先読みアサーションを使用することができますルックアヘッドアサーションはマッチの一部とは見なされない(したがって置き換えられない) :

これで「<table」のままになります。

+0

パーフェクト。ありがとう! –

+1

これは素晴らしい答えですが、完璧ではありません。/sオプションでドットマッチング空白を作るのは間違いです。オプションがなくても、ドットは空白とまったく同じです。 "空白"を "改行"に置き換えてください。答えは本当に完璧です。 – innaM

+0

@Manni:あなたは正しい、固定されています。 –

3

"。"通常、改行以外の文字にマッチします。あなたの正規表現に複数の行に一致させるために "s"を付ける:

$contents =~ s/^.*?<table/$newHeader/s; 
関連する問題