• ベストアンサー

php4 大文字小文字の区別なし置換

お世話になります。 phpを猛学中ですが、なかなかわかりません。 特に正規表現は難解です。 大文字小文字を区別しないで文字列を置換したり、その位置を求めたいのです。 PHP5なら、文字列$htmlの中の</BODY></body></Body>などをを</div>に変換 $html = str_ireplace('</body>','</div>', $html); また、文字列の位置を求める $pos0 = stripos($html, "</body>"); と、いうことで簡単だったのですが、 いざ、サーバへアップしてみるとなんと、そのサーバは、PHP4でした。 それで、動作しなくなってしまいました。 同じことをPHP4で処理するにはどのようにしたらよいのでしょうか。 QNo.4013255などを参考に考えたのですが、どうもだめです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

<? $html="hogehogehoge</BODY>fugafugafuga"; if(preg_match('/(.*?)<\/body>/i', $html,$matches)) $pos0 = strlen($matches[1]); print $pos0; ?> で</body>までの文字列をマッチさせれば、その長さが、出現位置に なりますね?

rqg2010
質問者

補足

yambejpさん、お早うございます。 ご丁寧にレスありがとうございます。 正規表現でできないものかと考えていたので、とてもありがたいレスでした。 しかし、どういうわけか、$pos0=0となってしまいます。 配列の番号など変えてみましたが、 strlen($matches[0]);だと、7 strlen($matches[1]);だと、0 strlen($matches[2]);だと、0 と、なってしまいます。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>しかし、文字列の位置を求めることはできません。 位置を求める方はlowercaseにしたものを対象に小文字で位置を求めればいいのでは?   $pos0 = strpos(strtolower($html), "<body");   $html = substr($html,$pos0);

rqg2010
質問者

お礼

shimixさん、お早うございます。 できました。 $html自体全てを小文字に変換してから、位置を求めるかと思ったのですが、 $html自体、小文字に変換されていませんでした。 どうもありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

preg_replace()でやるといいでしょう <? $html="</BODY></body></Body>"; print htmlspecialchars($html); $html = preg_replace('/<\/body>/i','</div>', $html); print htmlspecialchars($html); ?>

rqg2010
質問者

補足

yambejpさん、レスありがとうございます。 大文字小文字区別なしに変換できました。 しかし、文字列の位置を求めることはできません。 $html中の<bodyまでを削除するのに、 PHP5なら $pos0 = stripos($html, "<body"); $html = substr($html,$pos0); で、可能ですが、 php4ですと、striposが使えません。 これに変わる関数を探すのですが、見つけることができません。