мне нужно преобразовать preg_replace() в preg_replace_callback() в этой функции устаревшего расширения CMS:Преобразование функции из preg_replace в preg_replace_callback()
// santizes a regex pattern
private static function sanitize($pattern, $m = false, $e = false) {
if(preg_match('/^\/(.*)([^\\\\])\/(.*?)$/', $pattern, $matches)) {
$pat = preg_replace(
'/([^\\\\])?\(\?(.*\:)?(.*)\)/Ue',
'\'$1(?\' . self::cleanupInternal(\'$2\') . \'$3)\'',
$matches[1] . $matches[2]
);
$ret = '/' . $pat . '/';
if($m) {
$mod = '';
foreach(self::$modifiers as $val) {
if(strpos($matches[3], $val) !== false) {
$mod .= $val;
}
}
if(!$e) {
$mod = str_replace('e', '', $mod);
}
$ret .= $mod;
}
} else {
$pat = preg_replace(
'/([^\\\\])?\(\?(.*\:)?(.*)\)/Ue',
'\'$1(?\' . self::cleanupInternal(\'$2\') . \'$3)\'',
$pattern
);
$pat = preg_replace('!([^\\\\])/!', '$1\\/', $pat);
$ret = '/' . $pat . '/';
}
return $ret;
}
Я могу только представить себе, что делает эта функция. Я пробовал это, но он не работал:
private static function sanitize($pattern, $m = false, $e = false) {
if(preg_match('/^\/(.*)([^\\\\])\/(.*?)$/', $pattern, $matches)) {
$pat = preg_replace_callback(
'/([^\\\\])?\(\?(.*\:)?(.*)\)/U',
function($matches) {return CallFunction('\'$1(?\' . self::cleanupInternal(\'$2\') . \'$3)\''); },
$matches[1] . $matches[2]
);
$ret = '/' . $pat . '/';
if($m) {
$mod = '';
foreach(self::$modifiers as $val) {
if(strpos($matches[3], $val) !== false) {
$mod .= $val;
}
}
if(!$e) {
$mod = str_replace('e', '', $mod);
}
$ret .= $mod;
}
} else {
$pat = preg_replace_callback(
'/([^\\\\])?\(\?(.*\:)?(.*)\)/U',
function($matches) {return CallFunction('\'$1(?\' . self::cleanupInternal(\'$2\') . \'$3)\''); },
$pattern
);
$pat = preg_replace('!([^\\\\])/!', '$1\\/', $pat);
$ret = '/' . $pat . '/';
}
return $ret;
}
Может ли кто-нибудь помочь мне в этом?
Что должен делать этот код? –
Почему вы пытаетесь обернуть результаты в 'CallFunction'? Вы можете просто преобразовать строки в фактические вызовы функций и любые '$ 1' в' $ matches [N] 'concats. – mario
Я нашел 'function ($ matches) {return CallFunction (...); } 'as convert solution, и он работал в других заменах, которые я сделал. – Martin