- ベストアンサー
PHPの参考書で分からないとこがあります
- PHPによるWebアプリケーションスーパーサンプル第2版のあるページのサンプルファイルに分からない箇所があります。
- $result = preg_replace_callback($pattern, "toLink", $temp)の部分や、$match[1]や返り値の$tempについて理解できません。
- 何かこのサンプルの解説をしていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
上手にまとめられませんが... preg_replace_callback に $temp で渡された内容に $pattern の正規表現にマッチする部分が 見つかると、関数 toLink が呼び出されます。 toLink の 引数 $match ですが、 ここで、$match[0] にはパターン /<link>(.*?)<\/link>/ の全体にマッチした文字列が入っています 例えば1回目の呼び出しでは、最初に見つかった 「<link>Webアプリケーション</link>」 が入っています。 そのとき、$match[1] には()でくくられたサブパターンに該当する部分が入ります。 /<link>(.*?)<\/link>/ の (.*?) の () の中のパターンにマッチする部分です。 「<link>Webアプリケーション</link>」であれば「Webアプリケーション」が入ります。 toLink 内で、 echo "<pre>"; print_r($match); echo "</pre>"; みたいに表示してやれば $match に何が入っているかよくわかると思います。 その後 toLink 内では、 <a href="http://www.google.co.jp/search?lr=lang_ja&q=Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3">Webアプリケーション</a> みたいな文字列を作って、$temp に代入して、返しています。 toLink の 返り値で正規表現にマッチした部分が置き換えられます。 <link>Webアプリケーション</link> は、 <a href=\"http://www.google.co.jp/search?lr=lang_ja&q=Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3\">Webアプリケーション</a> に置き換えられることになります。 パターン見つかるたびに toLink が呼び出されて、toLink の戻り値で置換され、 最終的な結果が preg_replace_callback から返却されて、$result に入ります。 参考URL: preg_replace_callback http://www.php.net/manual/ja/function.preg-replace-callback.php -------------------------------------------------------------------------- // 通常は、$matches[0] がマッチした全体を表します。 // $matches[1] は、マッチした中で、パターン内の最初の '(...)' // にあてはまる部分を表します。それ以降も同様です。 -------------------------------------------------------------------------- preg_replace http://www.php.net/manual/ja/function.preg-replace.php -------------------------------------------------------------------------- replacement では、 \\n 形式または $n 形式(PHP 4.0.4 以降)で参照を指定することができます。 後者の形式の方が好ましい形式です。各参照は、n 番目のキャプチャ用サブパターンにマッチした テキストにより置換されます。 n は 0 から 99 までとすることができ、 \\0 または $0 は パターン全体にマッチするテキストを参照します。キャプチャ用サブパターンの番号 については、 その左括弧が左から右に(1から)カウントされます。 -------------------------------------------------------------------------- preg_match http://www.php.net/manual/ja/function.preg-match.php -------------------------------------------------------------------------- matches を指定した場合、検索結果が代入されます。 $matches[0] にはパターン全体にマッチしたテキストが代入され、 $matches[1] には 1 番目ののキャプチャ用サブパターンにマッチした 文字列が代入され、といったようになります。 --------------------------------------------------------------------------
お礼
長々と説明していただきありがとうございます。 参考にさせていただきます。