php 将 preg_replace 转换为 preg_replace_callback
php converting preg_replace to preg_replace_callback
我正在处理这个旧代码,运行 跨过这个 - 但失败了:
preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $sObject);
它告诉我 preg_replace e 修饰符已弃用,应改用 preg_replace_callback。
据我所知,我应该用一个回调函数来替换 's:'.strlen('').':\"\";'
部分,该回调函数会在比赛中进行替换。
我不太明白的是我将要替换的正则表达式的作用。将 php 填充在数据库字段中的序列化数据(愚蠢,我知道......)与损坏的长度字段并修复它们以重新插入是有点的一部分。
那么谁能解释一下那个位在做什么,或者我应该用什么来替换它?
使用
preg_replace_callback('!s:(\d+):"(.*?)";!', function($m) {
return 's:' . strlen($m[2]) . ':"' . $m[2] . '";';
}, $sObject);
必须删除 !e
修饰符。 </code> 反向引用必须替换为 <code>$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";
我正在处理这个旧代码,运行 跨过这个 - 但失败了:
preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $sObject);
它告诉我 preg_replace e 修饰符已弃用,应改用 preg_replace_callback。
据我所知,我应该用一个回调函数来替换 's:'.strlen('').':\"\";'
部分,该回调函数会在比赛中进行替换。
我不太明白的是我将要替换的正则表达式的作用。将 php 填充在数据库字段中的序列化数据(愚蠢,我知道......)与损坏的长度字段并修复它们以重新插入是有点的一部分。
那么谁能解释一下那个位在做什么,或者我应该用什么来替换它?
使用
preg_replace_callback('!s:(\d+):"(.*?)";!', function($m) {
return 's:' . strlen($m[2]) . ':"' . $m[2] . '";';
}, $sObject);
必须删除 !e
修饰符。 </code> 反向引用必须替换为 <code>$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";