我想逐行处理一个字符串,但在该字符串中可能会有一些子元素由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的行?
也许我必须逐行浏览那个字符串。如果有一个带有关键字的括号,则以下行将被推送到另一个数组,直到结束标记。 这是我的理论观点: - )
答案 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";
}
}
?>