正規表現で html を処理する下記のようなコード、一行コメントアウト(ダブルスラッシュ)でコメントアウトすると致命的なエラーになります。これ、何故だか分かりますか? 私はこれで小一時間ほど、悶々としていました。
preg_match('/<a.+?>(.+?)<\/a>/su',$html,$match);
これは一行コメントアウトが、それを書いた場所から改行コードまでをコメントアウトするもの、という認識でいる限り分かりません。正しくは「改行コードまたは PHP コードブロックの終わり」までをコメントアウトするもの(こちらのマニュアル参照)です。PHP コードブロックの終わりとは、すなわち「?>」のことであり、上記の正規表現内に文字の並びとして現れています。
結果、行末までのコメントアウトとならず、途中で PHP コードブロックから外れて直接ソースコードが出力されるばかりか、致命的な構文エラーの原因となってしまいます。このようなコードをコメントアウトしたい場合は、複数行コメント(「/*」と「*/」)で囲みます。
特に、今回のような html を処理する場合の正規表現式で出てきそうな、この形は注意したいところです。