PHPの正規表現・置き換えについてお願いします


PHP4(PHP5ではないです)でHTMLファイル内の文字列を置換える方法をおしえてください。
様々な形の<body>タグの末尾にタグ<div id="head">xxx</div>を挿入するイメージです。
やりたい事は過去記事 http://q.hatena.ne.jp/1138429819 のPHP版です。

■ 検索文字列のパターン(例)
1.<body>
2.<body onload="readCookie();">
3.<BODY BGCOLOR="#ffffff" ALINK="#0000FF">

■ 置換え後の文字列
1.<body><div id="head">xxx</div>
2.<body onload="readCookie();"><div id="head">xxx</div>
3.<BODY BGCOLOR="#ffffff" ALINK="#0000FF"><div id="head">xxx</div>


※同時に大量の置換えが発生するためになるべく
もっとも高速に動作すると思われる置き換え命令をお願いします。

環境 Apache 2.2.4 / PHP 4.4.7

回答の条件
  • 1人2回まで
  • 登録:2007/05/13 21:09:11
  • 終了:2007/05/13 21:42:22

回答(1件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012007/05/13 21:32:28

ポイント79pt

回答

$b = preg_replace("/(<body[^>]*>)/i","\\1<div id=\"head\">xxx</div>",$a);

説明1

"/(<body[^>]*>)/"
で
1.<body>
2.<body onload="readCookie();">
の両方に対応できます。

"/(<body[^>]*>)/i"
で大文字小文字を同列に扱うようになるので
3.<BODY BGCOLOR="#ffffff" ALINK="#0000FF">
にも対応できるようになります。

説明2

"\\1<div id=\"head\">xxx</div>"
\はエスケープコードです。
\1は前述の(かっこ)内の文字列が入ります。

動作確認せずに直接書いてますが、以上参考になれば、、、

id:urawareds

ありがとうございます

思った通りに動作しました!

2007/05/13 21:41:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません