私はC#のHTMLテンプレートエンジンで作業しています。私は、Full-Outコンパイラではなく、基本的な文字列操作(find/replace)を使用することを除いて、Handlebars.Net(Handlebars.jsのC#実装)などのライブラリと同じ機能を実現したいと考えています。カスタムHTMLのような構造の開始タグと終了タグを見つける
構文のようなものになるだろう:私は正規表現で単純な文字列置換を行うために探していますが、私は正規表現は、このような例では、終了タグを見つけるなど、この地域では欠点を持っているでしょう実現
{{#each item in items}}
<li>{{item.Name}}</li>
{{/each}}
私は、任意の「タグ」の始まりと終わりを見つける必要が
{{#each item in items}} //while parsing this tag...
<p>{{item.Name}}'s Hobbies:</p>
<ul>
{{#each hobby in item}}
<li>{{hobby.Name}}</li>
{{/each}} //this end tag would be found first
</ul>
{{/each}} //rather than this one
(例えば{として:(最初のタグを解析するとき、それはむしろ最後より{{/各}}埋め込まれた第1のを見つけるであろう)以下{#each}} ... {{/ each}})、それを解析してDOM風の構造を作ります各タグの内容"DOM"には複数のタグが埋め込まれていてもかまいません(埋め込まれたforeachループx4と考える)。これを達成するための良い方法は何ですか?
あなたはいくつかの異なる方法でそれを実装しようとする必要があります - それはあなたが学ぶ方法です、あなたはそれを行うことができます!あなたが何かにこだわって***特定の***戻って来て、その助けを求める。 – caesay
本当に "正しい"ことをするには、あなたがしたくないと言ったことを、かなりレキシング/解析する必要があります。これを行うには、文字列をそれぞれ{{#each}}ですばやく検索し、{{/ each}}まで読み上げます。この関数は再帰的になり、ネストされたエントリをサポートします。異なるタグがたくさんある場合、そのすべてを処理する必要があります。そのようなパーサーを書くことは大きな仕事です。あなたが試したことを見せたいなら、私は助けてくれるとうれしいですが、これは非常に大きな仕事であり、あなたはそれをする人を見つけるつもりはないここにいる。 SOは助けになり、コーダー4は無料になりません。 – dman2306
「良い」方法は、正規表現の文字列置換ではなく、状態やネストされた要素などを認識するパーサーを作成することです。なぜあなたはパーサを書こうとしませんか(私はあなたが 'フルアウトコンパイラ'によって意味すると思います)? – Tim