如何用preg_replace php替换

时间:2014-08-29 06:39:39

标签: php preg-replace

我有一个像这样的php数组:

$_0xb29b = ['item1','item2','item3'];

我有一个像这样的文本文件

_0xb29b[0] foo foo foo foo foo foo _0xb29b[2]

你们能告诉我如何用数组中的正确项目替换文本文件中的_0xb29b[0]吗?我希望文本是这样的:

item1 foo foo foo foo foo foo item3

2 个答案:

答案 0 :(得分:2)

使用preg_replace_callback()

<?php
// header('Content-Type: text/plain; charset=utf-8');

$str     = '_0xb29b[0] foo foo foo foo foo foo _0xb29b[2], _0xb29b[xxx]';
$_0xb29b = ['item1','item2','item3', 'xxx' => 5];

$result  = preg_replace_callback(
    '/\_0xb29b\[([^\]]+)\]/',
    function($matches)use($_0xb29b){
        return $_0xb29b[$matches[1]];
    },
    $str
);

echo $result;
?>

节目:

item1 foo foo foo foo foo foo item3, 5

注意:要将文件内容作为字符串获取,建议您阅读file_get_contents()上的手册。

答案 1 :(得分:0)

我花了太多时间让这个工作不发布。不使用preg_match,但几乎可以复制它。首先,它从变量名称创建针。然后,使用substr_count和strpos在haystack中搜索针。然后使用找到的针的位置和针的长度来获取变量的索引,并使用用于创建针的变量的数组替换。指向底部所有来源的链接。

<?php

function print_var_name($var) {
    foreach($GLOBALS as $var_name => $value) {
        if ($value === $var) {
            return $var_name;
        }
    }
    return false;
}

$_0xb29b = array('item1','item2','item3');

$needle = print_var_name($_0xb29b);
$needle_length = strlen($needle);
$haystack = '_0xb29b[0] foo foo foo foo foo foo _0xb29b[2]';
$haystack_height = strlen($haystack);

$num_needles = substr_count($haystack,$needle) . '<br />';
if($num_needles>0){
    $offset = 0;
    for($i=0;$i<$num_needles;$i++){
        $needle_pos[$i] = strpos($haystack,$needle,$offset);
        $needle_index[$i] = substr($haystack,$needle_pos[$i]+$needle_length+1,1);
        if($needle_pos[$i]+$needle_length+3<$haystack_height){
            $haystack = substr($haystack,0,$needle_pos[$i]). ' ' .${$needle}[$needle_index[$i]] . ' ' . substr($haystack,$needle_pos[$i]+$needle_length+3);
        } else {
            $haystack = substr($haystack,0,$needle_pos[$i]). ' ' .${$needle}[$needle_index[$i]];
        }
        $offset = $needle_pos[$i]+1;
    }
}
echo $haystack;
?>

[变量变量] [1]用于将字符串变回变量,变量是一个数组并使用

${$needle}[index] 

调用数组索引   http://php.net/manual/en/language.variables.variable.php
  http://php.net/manual/en/function.substr.php
  http://php.net/manual/en/function.strpos.php
  http://php.net/manual/en/function.substr-count.php
  How to get a variable name as a string in PHP?