繁体   English   中英

你能说出如何用正则表达式替换

[英]Could you tell how to replace by regular expression

你能说出如何通过preg-replace替换字符串(需要正则表达式):

/user/{parent_id}/{action}/step/1

在数组的等效值:

array('parent_id'=>32, 'action'=>'some');

要做:

/user/32/some/step/1

加成

这是一个典型的问题,所以我可能不知道变量的名称是什么

您可以使用str_replace

例如:

str_replace(array("{parent_id}", "{action}"), array(32, 'some'), "/user/{parent_id}/{action}/step/1");
$arr = array('parent_id'=>32, 'action'=>'some');

$out = str_replace(array_keys($arr),array_values($arr),$in);

不需要regexps!

说你有:

$arr = array('parent_id'=>32, 'action'=>'some');
$in =  '/usr/{parent_id}/{action}/step/1';

这将取代大括号:

function bracelize($str) {
    return '{' . $str . '}';
}    

$search = array_map('bracelize', array_keys($arr));
$out = str_replace($search, $arr, $in);

或者,如果您使用PHP> = 5.3,则可以使用lambdas:

$search = array_map(function ($v) { return '{'.$v.'}';}, array_keys($arr));
$out = str_replace($search, $arr, $in);
$s = '/user/{parent_id}/{action}/step/1';
$replacement = array('parent_id'=>32, 'action'=>'some');
$res = preg_replace(array('/\\{parent_id\\}/', '/\\{action\\}/'), $replacement, $s);

当然,你也可以使用str_replace (事实上​​,你应该 )。

<?php
  $string = '/usr/{parent_id}/{action}/step/1';
  $pattern = array('#{parent_id}#', '#{action}#');
  $values = array('32', 'some');

  echo preg_replace($pattern, $values, $string);
?>

如果您的问题并不复杂,我建议将preg_replace更改为str_replace。

编辑:我发现你事先并不知道变量名。 在这种情况下,你可以做这样的事情。

<?php
  function wrap_in_brackets(&$item)
  {
    $item = '{' . $item . '}';
    return true;
  }

  $string = '/usr/{parent_id}/{action}/step/1';
  $variables = array('parent_id' => 32, 'action' => 'some');

  $keys = array_keys($variables);
  array_walk($keys, 'wrap_in_brackets');
  echo str_replace($keys, array_values($variables), $string);
?>

扩展mvds的答案:

$in  = 'user/{parent_id}/{action}/step/1';
$arr = array('{parent_id}' => 32, '{action}' => 'some');
$out = str_replace(array_keys($arr), $arr, $in);

要么:

$in    = 'user/{parent_id}/{action}/step/1';
$arr   = array('parent_id' => 32, 'action' => 'some');
$arr[] = '';
$find  = array_merge(array_keys($arr), array('{', '}'));
$out   = str_replace($find, $arr, $in);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM