PHP动态正则表达式替换

PHP动态正则表达式替换,php,regex,dynamic,replace,Php,Regex,Dynamic,Replace,我想知道是否有办法在regexp中绑定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'"; 会产生类

我想知道是否有办法在regexp中绑定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”函数的表达式将更受欢迎


谢谢

您可以执行以下操作。去掉{}之间的内容,然后对其运行eval并将其设置为变量。然后使用新变量。例:

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

$thing将是{}中的内容,一个简单的substr可以提供给您$测试成为执行$thing的值。回显测试时,会得到一个随机数。

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

然后在crontab中,您可以执行以下操作:

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

e、 t.c

无论做什么,都不要将PHP逻辑存储在字符串中。您将不得不使用
eval()
,如果您的服务器没有为此向您开枪,您的同事也会

不管怎样,谈正事吧

您的情况相当简单,需要在字符串的末尾追加一个值。这样就足够了

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

如果你需要把某个值放在一个字符串的中间,或者可能在一个变量位置,你可以看看


你为什么还要考虑使用正则表达式?只需echo“/basket.php?nocache=”。兰特(010000);因为“path_str”将存储在数据库中,但在以后执行cron作业时,我想处理path_strok,我找到了我需要的:preg_replace_回调函数在数据库中存储函数名?可怕的,绝对可怕的,恶心的。您应该立即停止所有操作并返回绘图板。您错了,在db或其他地方存储任何逻辑离合器没有什么可怕的。如何在多种语言之间共享一些代码。对我来说很简单:协议+(语言+解释器)对不起,我没有要求其他选择。我的情况并不简单。你只是认为是的,这就是为什么你给我一个选择。这不是我所要求的。但是谢谢anyway@joey:我不喜欢eval,但这个解决方案可能是我在这里看到的最简单的了。@graydot:解释一下。在什么情况下,eval会变得危险。请不要只是重复您所听到的关于eval的内容,而是告诉我们您使用此功能时的非常个人的爱情故事。@Keil看一看,它是。它并不是简单地说
eval
绝对可怕,而是解释了在大多数情况下,
eval
绝对不是答案。
$stored = '/basket.php?nocache=%d&foo=bar';
$path   = sprintf($stored, rand(0,10000));