• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コメント削除のPHPスクリプトの作成)

PHPスクリプトのコメント削除方法についての質問

このQ&Aのポイント
  • $string = <<<here こんにちは。 すみません、乱入します。 //use constant DEBUG_TAIL => 2; //use constant DEBUG_LEX => 4; const DEBUG_ADD = 1; /* ダメダメ */ const DEBUG_TAIL = 2; //use constant DEBUG_TIME => 8; const DEBUG_TIME = 8; here; $comment1 = '/\/\/.*/'; $comment2 = '/\/\*+.*\*+\/is'; $string = preg_replace($comment1, '', $string); $string = preg_replace($comment2, '', $string);
  • 質問者はPHPファイルのコメント部分を削除するためのPHPスクリプトを作成したいと考えています。現在、正規表現を使用してコメントを削除しようとしていますが、うまくいきません。特に、ヒアドキュメントの部分に対して正規表現を適用する方法がわかりません。アドバイスを求めています。
  • 質問者はPHP5.3で、PHPファイルのコメント部分を削除するための正規表現を作成する方法を知りたいと考えています。

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

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

>というのはfile_get_contents()のことと理解して宜しいのですよね? そうですねfile_get_contents()が手っ取り早いでしょう。 >別に方法があるのでしょうか? ないこともないですね。 たとえばバッファリング機能をつかってこんな風にするとか <?PHP $fname="hoge.txt"; ob_start(); readfile($fname); $contents=ob_get_contents(); ob_end_clean(); print $contents; ?>

すると、全ての回答が全文表示されます。

その他の回答 (2)

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

>1行ずつ読みこんでいく)方法 一行で完結しているコメント以外は無理でしょう。 全行読みこんでからリプレースした後、表示すればよいのでは?

chopperin
質問者

お礼

ご回答ありがとうございます。 下の方のご指摘のようにfile_get_contents()を使ってみようかと思っております。 ・・・というより、 >全行読みこんでからリプレースした後 というのはfile_get_contents()のことと理解して宜しいのですよね? 別に方法があるのでしょうか?

すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

普通はfopenして1行単位で読むことはないんじゃないでしょうか。file_get_contentsでまとめて読み込んで処理するケースだと思います。 ですが、 >のようにすれば(ヒアドキュメント部は)一応ブラウザ上ではコメント部は削除されています。 phpスクリプト内で、文字列リテラル(引用符で括っていたり、それこそヒアドキュメントで書いていたり)の中にある「//」などは無視しないといけませんが、それは実装されていませんよね。

chopperin
質問者

お礼

ご回答ありがとうございます。 確かに。 文字リテラルの中に存在する"//"の事を考えるのを忘れておりました。 となると更に難しくなりますね。 $comment1の前に、 $com = '/(\"|\')(.*)\/\/.*(\"|\')/'; preg_replace($com, "\2", $string); のようにすると言うことでしょうか? それと、おっしゃられるように、file_get_contents()を使うべきでした。

chopperin
質問者

補足

自分は何を考えてるのでしょうか・・・。 今書いた後、文字列の中の"//"は除去してはいけないのでした。 短絡的に考えて除去する方法を書いてしまいました。 となると、文字列内を除去しないという手法は・・・思いつきません。 $comment1をかなり変更しないといけないと言うことでしょうね。

すると、全ての回答が全文表示されます。

関連するQ&A