是的,这是可能的!针对这种情况,我编写了以下解决方案:
$regex = '#^en/cities/([^/]+?)/$#';
$replace = array('paris');
$result = preg_replace_callback('#^\^|\([^)]*\)|\$$#', function($m)use($replace){
static $index = 0;
if($m[0] === '^' || $m[0] === '$'){return '';}
if(isset($replace[$index])){
return $replace[$index++];
}
return $m[0];
}, substr($regex, 1, -1));
echo $result;
在线演示
我已经使其“灵活”,因此您可以向其中添加更多的值!
$regex = '#^en/cities/([^/]+?)/region/([^/]+?)$#';
$replace = array('paris', 'nord');
$result = preg_replace_callback('#^\^|\([^)]*\)|\$$#', function($m)use($replace){
static $index = 0;
if($m[0] === '^' || $m[0] === '$'){return '';}
if(isset($replace[$index])){
return $replace[$index++];
}
return $m[0];
}, substr($regex, 1, -1));
echo $result;
在线演示
解释:
说明:
$regex = '#^en/cities/([^/]+?)/region/([^/]+?)$#';
$replace = array('paris', 'nord');
$result = preg_replace_callback('#^\^|\([^)]*\)|\$$#', function($m)use($replace){
static $index = 0;
if($m[0] === '^' || $m[0] === '$'){return '';}
if(isset($replace[$index])){
return $replace[$index++];
}
return $m[0];
}, substr($regex, 1, -1));
echo $result;
注意:此功能仅适用于 PHP 5.3+。