こんばんわ。
早坂@magicalです。
今日はpreg_match関数について述べていきたいと思います。
preg_matchはマッチングを検出する関数(ちょっと違うかも・・・)です。
ある特定のパターンに一致したらTRUE(真)または、配列を返します。
ではでは、例題でhtmlを配列に入れて、それを1文化し、マッチングを検証したいと思います。(改行も取ります)
PHP4、PHP5で動くと思います。
< ? $source = file( "http://www.magical-remix.co.jp" ); // ソース取得 $rfSource =& $source ; // 重いので参照させるように unset( source ); //メモリ開放 $implodeSource =& implode( "", $rfSource ) ; // 1文化します $trimSource =& preg_replace( "/(n|r|t)/", "", $implodeSource ); // 改行、タブ文字を取り除きます preg_match( "/<title>(.*?)</title>/i", $trimSource, $matches ) ; // タイトルにマッチングさせ、$matchesに格納します print_r( $matches ); //配列を出力しています。 ?>
これでhtmlのタイトルを取得することが出来ます。
マッチパターンを見てみましょう。
「”/<title>(.*?)</title>/i“」
みただけでは分かりませんよね。
何をしているかというと、「i」は大文字小文字関係なくマッチパターンにマッチする箇所を探します。
「(.*?)」は最短マッチと呼ばれるものです。
例えば、こんなことはあの例のhtml生成ソフトくらいにしかないと思われますが、
「タイトルタグがなぜ2つ」
というときがあったとします。
「<title>タイトル1</title><title>タイトル2</title>」
なんとなーくわかってきたとは思いますが、「最短距離で</title>にマッチした箇所までを抽出する」ようになっています。
最短距離というのは、「<title>」が始まってから、「</title>」で終わるまでの距離(文字数といえばいいのかなぁ。。)が一番短いときのことです。
分かってもらえたでしょうか??
なんというか上手く説明できずにすみません。
これと同様にbodyタグ以下を抽出したり、抽出したタグを削除したりといろいろ出来ます。
しかし最悪な状態が起きる場合もあります。
メモリオーバーフローです。
preg_march関数はただでさえ重い関数です(使い方によっては軽くなります。肯定先読みとかいろいろあります。)
使う際は十分注意して使用してください。
では、今日はこれにて失礼します。
最近のコメント