[PHP-users 1758] 開始タグと終了タグの処理について

Osamu Shigematsu php-users@php.gr.jp
Mon, 03 Sep 2001 17:25:41 +0900


重松です。

FastTemplate の改造をしています。
dynamic block の開始/終了をもっと柔軟に行いたいと考えています。
mbereg_search() を使って、開始タグと終了タグを検索していこうと思いました。
まだこれらになれていないため、以下のような簡単なテストコードを書きました。

<?php

header("content-type: text/plain");

$tag = '
<!-- NAME: dynamic.tpl -->
<table>
<!-- BEGIN DYNAMIC BLOCK: row -->
<tr>
<td>{NUMBER}</td>
<td>{BIG_NUMBER}</td>
</tr>
<!-- END DYNAMIC BLOCK: row -->

</table>
<!-- END: dynamic.tpl -->
';

$new_parent = "";
$macro = "row";
$re = "<!--\s*(BEGIN|END)\s+DYNAMIC\s+BLOCK\s*:\s*$macro\s*-->";
print $re . "\n";

if(mbereg_search_init($tag,$re,'i')){
    mbereg_search();
    $pos = mbereg_search_pos();
    print_r($pos);
    $regs = mbereg_search_getregs();
    print_r($regs);
}else{
    print("mbereg_search_init() failure!");
}

?>

実行結果は、

<!--\s*(BEGIN|END)\s+DYNAMIC\s+BLOCK\s*:\s*row\s*-->
Array
(
    [0] => 121
    [1] => 31
)
Array
(
    [0] => <!-- END DYNAMIC BLOCK: row -->
    [1] => END
)

となるのですが、最初の <!-- BEGIN DYNAMIC BLOCK: row --> の部分にマッチする
ことを期待しているのですが、マッチしません。

どうしてでしょうか。

環境は、
    VineLinux 2.1.5 ftp
    PHP 4.0.6 + mbereg の拡張
    Apache 1.3.20
です。

アドバイスよろしくお願いいたします。

<独り言>
FastTemplate ってよく見ると、file() で各行毎の配列で持ってきてるくせして、そ
のあと、implode() でくっつけて、explode() ではなくて、split("\n", $foo) とし
てまた行毎に区切り直していて、無駄の極みです。ホント、Fast なのかな?
</独り言>

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/
mailto:shige@ravi.ne.jp