我想知道是否有办法在正则表达式中绑定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'功能的表达式会更受欢迎。
由于
答案 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