将数字乘以混合字符串

enl*_*loz 4 php replace numbers

我的麻烦是将包含各种字符的字符串中的数字相乘.

例如,

输入:

$k     = 2;    
$input = '<div style="padding:10px 15px; font-size:1em ;height:2%;"></div>';
Run Code Online (Sandbox Code Playgroud)

输出:

<div style="padding:20px 30px; font-size:2em ;height:4%;"></div>
Run Code Online (Sandbox Code Playgroud)

编辑

$k可以是任何整数(0-9).$input字符串中的所有数字都乘以$k.

net*_*der 10

我用的是preg_replace_callback:

$input = '<div style="padding:10px 15px; font-size:1em ;height:2%;"></div>';
$output = preg_replace_callback('/([0-9]+)\s*(px|em|%)/i', function($matches){
   $k = 2;
   return ($matches[1] * $k).$matches[2];
}, $input);
Run Code Online (Sandbox Code Playgroud)

以上仅替换数字px,em或者%.

您还可以$k自己提供lambda函数,以获得更大的灵活性:

$k = 2;
$output = preg_replace_callback('/([0-9]+)\s*(px|em|%)/i', function($matches) use ($k){
   return ($matches[1] * $k).$matches[2];
}, $input);
Run Code Online (Sandbox Code Playgroud)

  • +1您的解决方案还会检查上下文(px | em |%)哪个好.另一种解决方案将随机替换数字. (2认同)

And*_*eKR 6

$k = 2;

$f = function ($i) use ($k) {
  return $i[0] * $k;
};

$s = '<div style="padding:10px 15px; font-size:1em ;height:2%;"></div>';
echo preg_replace_callback('/[0-9]+/', $f, $s);
Run Code Online (Sandbox Code Playgroud)

这使用自PHP 5.3以来可用的匿名函数.如果要在PHP <5.3中使用它,则必须使用create_function()创建lambda函数.


Joh*_*ica 5

preg_replace('/\d+/e', '$0 * $k', $input);
Run Code Online (Sandbox Code Playgroud)