PHP动态Regexp替换

时间:2011-08-24 21:10:56

标签: php regex dynamic replace

我想知道是否有办法在正则表达式中绑定PHP函数。

示例:

$path_str = '/basket.php?nocache={rand(0,10000)}';
$pattern = ? // something i have no idea
$replacement = ? // something i have no idea

$path = preg_replace($pattern, $replacement, $path_str);

然后:

echo "'$path'";

会产生类似

的东西
'/basket.php?nocache=123'

不仅限于'rand'功能的表达式会更受欢迎。

由于

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作。删除{}之间的东西,然后在其上运行eval并将其设置为变量。然后使用新变量。例如:

$str = "/basket.php?nocache={rand(0,10000)}";
$thing = "rand(0,10000)";
eval("\$test = $thing;");
echo $test;

$ thing将是{}中的一个简单的substr可以给你的东西。 $ test成为执行$ thing的值。当您回显测试时,您会得到一个随机数。

答案 1 :(得分:1)

不管怎样,不要将PHP逻辑存储在字符串中。你最终不得不使用eval(),如果你的服务器没有为你射击,你的同事就会。{/ p>

Anywhoo,归功于商业。

您的情况非常简单,您需要在字符串末尾附加值。像这样的东西就足够了

$stored = '/basket.php?nocache=';
$path   = $stored . rand(0,10000);

但是,如果您需要将值放在字符串中间的某个位置,或者可能位于可变位置,则可以查看sprintf()

$stored = '/basket.php?nocache=%d&foo=bar';
$path   = sprintf($stored, rand(0,10000));

答案 2 :(得分:0)

我不会尝试将函数存储在数据库中。而是存储某种表示用于每种特定情况的函数类型的字段。

然后在你的crontab中你可以做类似的事情:

switch ($function)
{
    case 'rand':
    $path_str = '/basket.php?nocache='. rand(0,10000);
}

e.t.c