如何动态替换字符串?

时间:2018-04-28 19:40:10

标签: php regex

我有一个像这样的字符串

{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_replacepreg_replace_all,但它不能正常工作。 我只能用

替换{columns}
preg_replace("/{columns}(.+?){\/columns}/is", "<div class='row'>$1</div>", $text); 

但其他的东西很难。有人可以提前帮助我

这是一个例子 https://3v4l.org/mPrMS

1 个答案:

答案 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

相关问题