我有一个像这样的字符串
{columns}
{col}
Column 1
{/col}
{col}
Column 2
{/col}
{/columns}
...
{columns}
{col}
Column 1
{/col}
{col}
Column 2
{/col}
{col}
Column 3
{/col}
{/columns}
// Result
<div class="row">
<div class="col-md-6">
...
</div>
<div class="col-md-6">
...
</div>
</div>
...
我想用{col}
替换<div class="col-md-x></div>"
。它应该是动态,这意味着如果列有三个cols,则类应为col-md-4
。 col的长度是12.我正在尝试使用preg_replace
或preg_replace_all
,但它不能正常工作。
我只能用
{columns}
preg_replace("/{columns}(.+?){\/columns}/is", "<div class='row'>$1</div>", $text);
但其他的东西很难。有人可以提前帮助我
这是一个例子 https://3v4l.org/mPrMS
答案 0 :(得分:1)
好吧,你的代码正在运行,只是不用preg_match计算字符串出现次数。
define("GRID", 12);
function rep($txt) {
$txt = $txt[1];
$i = substr_count($txt, '{col}');
$col = $i > 1 && $i <= GRID ? floor(GRID/$i) : GRID;
$txt = preg_replace('/{col}(.*?){\/col}/is', '<div class="col-md-'.$col.'">$1</div>', $txt);
return '<div class="row">'.$txt.'</div>';
}
$input = '{columns} {col} Column 1 {/col} {col} Column 2 {/col} {/columns} {columns} {col}Column 1{/col} {col}Column 2 {/col} {col} Column 3 {/col} {/columns}';
$str = preg_replace_callback('/{columns}(.*?){\/columns}/is', 'rep', $input);
echo $str;
这是你修改过的代码,正如你在这里看到的那样:https://3v4l.org/M5E05