[PHP-users 20432]Re: 再帰(?)正規表現置換について

UNO Shintaro uno @ venus.dti.ne.jp
2004年 2月 18日 (水) 18:37:49 JST


> 思いっきり対症療法ですね。
> 原因としては、不完全に文字列をクオートすることなので、PCRE 側のバグ、と
> いっていい気がしないでもないです。

確かに、この場面においては、不便なbehaviourですね。
理屈はわかるし、回避できなくもないので、まあしょうがないかという感じ。


> テストコードまで書いてくださってありがとうございます。

最初の質問内容を見てお題がテンプレートエンジンなのが分かったので、
面白そうだなと思って。仕様を理解するにはテストを書くのが一番ですし。
(ユニットテストやテストドリブン大好き)

テストコードを書いて思ったことを一つ。
_parse()は変換処理(文字列I/Oのみ)、parse()はファイル操作とinclude、
と明確に役割分担されていたら_parse()のテストが書きやすいなー、と。
つまり、parse()側での呼び出しが
file_put_contents($dst, html_template::_parse(file_get_contents($src));
みたいな感じです。速度に悪影響があるかもしれませんが。


> それにしても、鮎川さんのアイデアで驚くほど少ないコーディングの量で、ずい
> ぶん楽ができそうです。
> 
> どうも、デザイナーの人は、論理的に構造を考えるのではなく、全体の見た目で
> デザインするようなので、テンプレートは、GUI エディタで編集できないと、使っ
> てもらえないし、高度なものだと、覚えてもらえないので、シンプルなものが一
> 番だなと痛感してます。

同感です。凄いデザイナーさんは凄いんですけれど、
その腕に依存しすぎると分業規模の拡大がしにくいですし。


> 後は、入れ子で同じ変数名だと、うまく対をマッチできない問題を考えたいと思
> います。

テストパターンはこんな感じでしょうか。
<!--{def a}--><!--{def a}--><!--{/def a}--><!--{/def a}--><!--{def a}--><!--{/def a}-->

このパターンで最初の{def a}と2番目の{/def a}を対応させるのは、
「正規表現は数を数えられない」ため正規表現だけでの実現は厳しいです。
うまいtrickが無い限り、解決には、再帰降下型文法解析や文脈自由文法の
導入が要ると予想します。

-- 
UNO Shintaro, 宇野 信太郎
mailto:uno @ venus.dti.ne.jp
http://www.venus.dti.ne.jp/~uno/



PHP-users メーリングリストの案内