単純なテンプレート/コンテンツパーサーを作成して、最終出力ページにテキストブロックを配置する場所を指定できます。私が整理した "マークアップ"は、それ自身の行に@blockname>のようなものです。したがって、本文にブロックを挿入するには、@ body>でテキストを開始します。ブロック名は、使用したいものであれば何でも構いませんが、スペースや改行を含むことはできません。PHP regex split on @。*?>
@bodyのようなテキスト文字列がテキストに埋め込まれている場合を除いて、すべてうまく動作します。埋め込みテキストも分割されます。これは本当にシンプルなようですが、@で始まり、空白以外の文字で始まり、行末に>で終わる行に一致させたいだけです。私は今、そのほとんど機能していたコマンドがある:
preg_split('/@([^\s].*?[^>])>/', $tpl, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
私がちょうど^ @(。?[^ \ s]は* [^>])> $を使用することができるはずと思われるが、それは」doesnのまったく働きません。私は何かシンプルなものが欠けていると感じている私は無駄に最後に修飾子の束を試してみました。解析する
例のテキスト:
@css>
.example {font-weight:bold;}
@js>
function example() {
alert('example');
}
@body>
This is some sample @body> text to show
理想的な正規表現の分割はして戻ってくるでしょう:
Array
(
[0] => css
[1] =>
.example {font-weight:bold;}
[2] => js
[3] =>
function example() {
alert('example');
}
[4] => body
[5] =>
This is some sample @body> text to show
'^'は各行の先頭ではなく、文字列の先頭にのみ一致します。各行で一致させるために修飾子を使うか、あらかじめ文字列を分割してください。 – knittl
エスケープシーケンスを定義する方が簡単でしょうか?コンテンツの本文にマークアップタグのようなものが必要な場合は、それをエスケープする必要があることをユーザーに伝えます。結局のところ、HTMLの中で '<'、 '>'などのようなものの目的は、あなたが持っている正確な問題を克服することです... – DaveRandom