gpt4 book ai didi

php 将 preg_replace 转换为 preg_replace_callback

转载 作者:可可西里 更新时间:2023-10-31 22:41:24 28 4
gpt4 key购买 nike

我正在处理这段旧代码,遇到了这个 - 但失败了:

preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $sObject);

它告诉我 preg_replace e 修饰符已弃用,改为使用 preg_replace_callback。

据我所知,我应该用回调函数替换 's:'.strlen('$2').':\"$2\";' 部分替补上场。

我不太明白的是我将要替换的正则表达式的作用。获取填充在数据库字段中的 php 序列化数据(愚蠢,我知道......),长度字段损坏并修复它们以重新插入是有点的一部分。

那么谁能解释一下那个位在做什么,或者我应该用什么来替换它?

最佳答案

使用

preg_replace_callback('!s:(\d+):"(.*?)";!', function($m) {
return 's:' . strlen($m[2]) . ':"' . $m[2] . '";';
}, $sObject);

必须删除 !e 修饰符。 $2 反向引用必须替换为 $m[2],其中 $m 是包含匹配值和子匹配项的匹配对象,并传递给内部匿名函数 preg_replace_callback .

这是一个demo s: 之后的数字替换为 $m[2] 长度:

$sObject = 's:100:"word";';
$res = preg_replace_callback('!s:(\d+):"(.*?)";!', function($m) {
return 's:' . strlen($m[2]) . ':"' . $m[2] . '";';
}, $sObject);
echo $res; // => s:4:"word";

关于php 将 preg_replace 转换为 preg_replace_callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35279603/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com