我創建了一個簡單的模板/內容解析器,您可以指定哪些文本塊應放置在最終輸出頁面中。我自己定義的「標記」就像@blockname>。因此,要在文本框中添加一段文字,您可以使用@body>開始文本。塊名可以是任何你想使用的,但不能包含空格或換行符。PHP正則表達式分割在@。*?>
一切工作正常,除非文本中嵌入文本字符串像@body>。它也會在嵌入文本上分割。這看起來非常簡單,我只想匹配以@開頭的行,後跟任何非空白字符並以行結尾的結尾。我已經把現在幾乎工作的命令是:
preg_split('/@([^\s].*?[^>])>/', $tpl, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
看來我應該只可以使用^ @(?[^ \ s] * [^>])> $,但沒有按」根本不工作。我覺得我錯過了一些簡單的東西。我已經嘗試了一堆修飾符,但最終無濟於事。
示例文本解析:
@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 2012-01-28 15:26:59
定義轉義序列不是更容易嗎?只要告訴用戶,如果他們想在內容正文中看到類似標記標籤的內容,那麼它必須被轉義?畢竟,像HTML中的'<','>'等東西的目的是爲了克服你有的確切問題... – DaveRandom 2012-01-28 15:31:01