Php 将包含子元素的字符串拆分为行

Php 将包含子元素的字符串拆分为行,php,regex,Php,Regex,我想逐行处理字符串,但在该字符串中可能有一些用方括号标记的子元素 Line 1 [keyword|title|anything] Line 2 Line 3 Line 4 [end] Line 5 Line 6 格式化的结果可能类似于: <div class="element">Line 1</div> <div class="subcat"> <h3>title</h3> <div class=”element

我想逐行处理字符串,但在该字符串中可能有一些用方括号标记的子元素

Line 1
[keyword|title|anything]
Line 2
Line 3
Line 4
[end]
Line 5
Line 6
格式化的结果可能类似于:

<div class="element">Line 1</div>
<div class="subcat">
    <h3>title</h3>
    <div class=”element”>Line 2</div>
    <div class=”element”>Line 3</div>
    <div class=”element”>Line 4</div>
</div>
<div class=”element”>Line 5</div>
<div class=”element”>Line 6</div>
如何检查方括号中的关键字?i、 e.如果关键字是“subcat”,我想使用括号中的给定标题将行放在subcat div中(如上图所示)

我想我必须使用正则表达式来从括号中提取信息。但是我怎样才能得到subcat的线路呢

也许我得一行一行地检查那根绳子。如果有带关键字的括号,则将以下行推送到另一个数组,直到结束标记。 这是我的理论观点:-)

试试这个:

<?php

$string="Line 1
[subcat|title|anything]
Line 2
Line 3
Line 4
[end]
Line 5
Line 6";

$string = str_replace(PHP_EOL, "#", $string);
$lines = explode("#", $string);


foreach($lines as $line)
{ 

    if (preg_match("/^\[(.*)\|(.*)\|(.*)\]$/",$line, $matches))
    {
        #if($matches[1] == 'subcat') 
            print '<div class="'.$matches[1].'">'
            ."\n"
            .'<h3>'.$matches[2].'</h3>'
            ."\n";
    }

    else
    {
        print '<div class="element">'.$line.'</div>'."\n";
    }
        if ($line =="[end]") 
    {   
        print "<\div>"."\n";
    }


}
?>


转到JSON而不是难以解析的随机文本行怎么样。从哪里获得
subcat
?我只需要格式化上面显示的内容。因此div元素只是一个例子。结果数组(多维或json或其他)也可以。我不知道如何“提取”第2、3和5行,因为它们是方括号中的内容。“subcat”只是一个关键字的示例。
<?php

$string="Line 1
[subcat|title|anything]
Line 2
Line 3
Line 4
[end]
Line 5
Line 6";

$string = str_replace(PHP_EOL, "#", $string);
$lines = explode("#", $string);


foreach($lines as $line)
{ 

    if (preg_match("/^\[(.*)\|(.*)\|(.*)\]$/",$line, $matches))
    {
        #if($matches[1] == 'subcat') 
            print '<div class="'.$matches[1].'">'
            ."\n"
            .'<h3>'.$matches[2].'</h3>'
            ."\n";
    }

    else
    {
        print '<div class="element">'.$line.'</div>'."\n";
    }
        if ($line =="[end]") 
    {   
        print "<\div>"."\n";
    }


}
?>