如何搜索像[num:0]这样的模式并替换它


How to search for a pattern like [num:0] and replace it?

我知道有很多关于替换字符串中的内容的教程和问题。

但我找不到一个关于我想做什么的答案!

假设我有一个类似的字符串

$string="Hi! [num:0]";

还有一个像这样的数组示例

$array=array();
$array[0]=array('name'=>"na");
$array[1]=array('name'=>"nam");

现在我想要的是PHP应该首先搜索像[num:x]这样的模式,其中x是数组中的有效键。然后将其替换为数组的匹配键。例如,上面给出的字符串应该变成:Hi! na

我想这样做:

  1. 搜索图案
  2. 如果找到,调用一个函数来检查号码是否有效
  3. 如果有效,则返回该键数组中的名称,如0或1等
  4. PHP会替换字符串中函数返回的值来代替模式

但我找不到执行这个想法的方法。如何匹配该模式并为每次匹配调用函数?

这正是我想做的。任何其他方法也会起作用。

如果你对我的问题有任何疑问,请在评论中提问。

试试这个

$string="Hi! [num:0]";
$array=array();
$array[0]=array('name'=>"na");
$array[1]=array('name'=>"nam");

echo preg_replace('#('!)?'s+'[num:('d+)']#ie','isset($array['2]) ? "'1 ".$array['2]["name"] : " "',$string);

如果您不想要Regex的开销,并且您的字符串格式保持不变;你可以使用:

<?php
$string="Hi! [num:0]"; 
echo_name($string);          // Hi John
echo "<br />";
$string="Hello! [num:10]"; 
echo_name($string);          // No names, only Hello
// Will echo Hi + Name
function echo_name($string){
$array=array();
$array[0]=array('name'=>"John");
$array[1]=array('name'=>"Doe");
$string = explode(" ", $string);
$string[1] = str_replace("[num:", "", $string[1]);
$string[1] = str_replace("]", "", $string[1]);
if(array_key_exists($string[1], $array)){
    echo $string[0]." ".$array[$string[1]]["name"];
} else {
    echo $string[0]." ";
}
}// function echo_sal ENDs
?>

Live:http://codepad.viper-7.com/qy2uwW

假设:

  • $string总是只有一个空格,正好在[num:X]之前
  • [num:X]总是采用相同的格式

当然,如果您可以将输入设置为简单的
,则可以跳过str_replace行Hi! 0Hello! 10