PHP正则表达式在@.*上拆分>;


PHP regex split on @.*?>

我创建了一个简单的模板/内容解析器,您可以在其中指定文本块应放置在最终输出页面中的位置。我确定的"标记"是类似于它自己行上的@blockname>。因此,要在正文中放入一块文本,您需要以@body>开头。块名可以是您想要使用的任何名称,但不能包含空格或换行符。

一切都很好,除非文本中嵌入了像@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

我只想匹配一条以@开头,后跟any的行非空白字符,并在行尾以>结尾。

你可以用

"/^@(''S+)>$/m"

使用PHP报价。您可能缺少/m开关,它使^/$匹配行的开始/结束,而不仅仅是字符串。