我创建了一个简单的模板/内容解析器,您可以指定哪些文本块应放置在最终输出页面中。我自己定义的“标记”就像@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