我在php字符串中有类似下面的字符串,我希望用[更改选项卡的次数]后面的值替换制表符字符)...]
[4m ljjklj klj lkj lkjlj lk[]
[3m ljjklj klj lkj lkjlj lk[]
[m ljjklj klj lkj lkjlj ljk l
我写了以下代码
$string_log= preg_replace('/\[(.*?)m/',"\t",$string_log);
取代了一个制表符,但我需要根据字母m前面的数字替换它。
例如,如果字符串是
[4m] then it should be \t\t\t\t
[m] then it should be \t
[2m] then it should be \t\t
如何在php中使用preg_replace实现这一点?
答案 0 :(得分:2)
$string_log = preg_replace_callback('/\[(.*?)m/', function ($match) {
if ($match[1]) $count = $match[1];
else $count = 1;
return str_repeat("\t", $count);
}, $string_log);
如果你必须使用普通preg_replace
并且不能使用其他功能,那么我认为你必须使用/e
修饰符为每场比赛执行代码,这是非常危险的应该避免。
答案 1 :(得分:2)
您希望使用回调来实现此目的。
$str = preg_replace_callback('~\[(\d*)m~',
function($m) {
$count = $m[1] ?: 1;
return str_repeat("\t", $count);
}, $str);