PHP preg_replace字符串,其值为variable

时间:2015-04-25 06:50:17

标签: php regex preg-replace str-replace

我试图在php中使用正则表达式来查找以“$”开头的所有字符串并用适当的变量替换它。例如:

$value = "Some Value";
<b>$value</b>

最终结果应该是:

<b>Some Value</b>

这就是我的尝试:

ob_start("tagreplace");


function tagreplace ( $tagreplace ) 
{

    $value1 = "Some Value";
    $pattern = '/(?<=\s)(\$[^#\s]+)(?=\s)/';

    $tagreplace = preg_replace( $pattern , '<?php echo $0 ?>', $tagreplace);

    return $tagreplace;
}

/* html files for combining */
include 'main_content.html';

ob_end_flush();

但是这似乎不起作用......我尝试过循环,而循环,并没有一个工作。基本上我试图非常懒惰并使用正则表达式来制作我可以放在任何地方的非常简写的变量,将"$value"之类的字符串替换为变量$value赋予它的任何相应值。

我知道/e现已弃用,所以我不能用它来将php标记视为实际代码。我试图使用preg_replace_callback,但实际上并没有做任何事情。我想可能没有办法正确地做到这一点。

1 个答案:

答案 0 :(得分:0)

你在这里尝试做什么并不完全清楚,尽管如果你对你的正则表达采取略微不同的方法,你可能会取得更大的成功。基本上,将模式分解为三个捕获组(开始标记,值和结束标记)更容易

function tagreplace ( $tagreplace ) {

    $replace = "Some Value";
    $pattern = '/(.+>)(.+)(<.+)/m';
    $tagreplace = preg_replace( $pattern, '$1'.$replace.'$3', $tagreplace);
    return $tagreplace;
}

$value = "Old Value";
echo tagreplace("<b>$value</b>");

echo "\n -- Using \$value slightly different-- \n";

$value = "<b>$value</b>";
echo tagreplace($value);

通过使用更通用的模式,您应该可以换出$value,无论它是整个值,还是< >标记之间的内容。如果有疑问,请使用正则表达式测试程序(下面链接),您可能可以消除几个递归循环,绕圈。

示例:

https://regex101.com/r/rW8lC6/1