将具有子元素的String拆分为行

时间:2014-12-26 12:37:21

标签: php regex

我想逐行处理一个字符串,但在该字符串中可能会有一些子元素由squarebracket-tags标记。

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>

但是结果数组(可能是多维的?)也足够了。

PHP:

$lines = explode(PHP_EOL, $string);
preg_match_all("/\[[^\]]*\]/", $string, $matches);

如何检查方括号中的关键字?即如果关键字是“subcat”,我想使用括号中的给定标题(如上所示)将行放在subcat-div中

我想我必须使用RegEx从括号中获取信息。但是如何获得subcat的行?

也许我必须逐行浏览那个字符串。如果有一个带有关键字的括号,则以下行将被推送到另一个数组,直到结束标记。 这是我的理论观点: - )

1 个答案:

答案 0 :(得分:0)

试试这个:

<?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";
    }


}
?>