Php 两个正则表达式之间的差异
我用这个正则表达式来修复损坏的序列化对象Php 两个正则表达式之间的差异,php,regex,Php,Regex,我用这个正则表达式来修复损坏的序列化对象 $data = preg_replace( '!s:(\d+):"(.*?)";!se', "'s:' . strlen('$2') . ':\"$2\";'", $data ); 但是最近更新了PHP5.5+的代码,因为/e修饰符已被弃用 $data = preg_replace_callback( '/s:(\d+):"(.*?)";/', create_function( '$match
$data = preg_replace(
'!s:(\d+):"(.*?)";!se',
"'s:' . strlen('$2') . ':\"$2\";'",
$data
);
但是最近更新了PHP5.5+的代码,因为/e修饰符已被弃用
$data = preg_replace_callback(
'/s:(\d+):"(.*?)";/',
create_function(
'$matches',
'return "s:".strlen($matches[2]).":\"".( $matches[2] )."\";";'
),
$data
);
我已经分析了这两个函数的返回数据,似乎新函数删除了额外的斜杠
结果为1
<a title=\\"A sample title\\" href=\\"http://sitei-url.com/\\">text</a>
谢谢大家的回答 带有
闭包的示例
:
$data = preg_replace_callback(
'/s:(\d+):"(.*?)";/',
function($matches) {
return "s:" . strlen($matches[2]) . ":\\\"" . $matches[2] . "\\\";";
),
$data
);
编辑PHP 5.2兼容性
function pregCallback($matches) {
return "s:" . strlen($matches[2]) . ":\\\"" . $matches[2] . "\\\";";
}
$data = preg_replace_callback('/s:(\d+):"(.*?)";/', 'pregCallback', $data);
如果第一个有效,为什么不直接使用它呢?你想在这里实现什么?第一个也有
s
修饰符,你不在第二个上使用它吗?请同时显示一个输入数据的示例。将你的“:\”($matches[2])。“\”;“
改为”:\”($matches[2])。“\\”;“
@php dev生成一个语法错误,意外的“'解析错误:语法错误,意外的T_返回”在PHP 5.2.17中,编辑后的文件还将序列化数据“替换为”如s:15:“显示”小部件“;原始数据s:45:“文本”
必须如下所示s:45:“文本”
您的文件返回此s:45:“文本”
$data = preg_replace_callback(
'/s:(\d+):"(.*?)";/',
function($matches) {
return "s:" . strlen($matches[2]) . ":\\\"" . $matches[2] . "\\\";";
),
$data
);
function pregCallback($matches) {
return "s:" . strlen($matches[2]) . ":\\\"" . $matches[2] . "\\\";";
}
$data = preg_replace_callback('/s:(\d+):"(.*?)";/', 'pregCallback', $data);