preg_replace用后缀加上自身替换前缀

时间:2012-03-23 07:45:07

标签: php regex preg-replace

我有一个手机列表$numbers,如果数字本身以39数组中的一个开头,我必须更改它们,前面加上数字$prefixes

我现在不知道如何返回引用找到的前缀,或者(它是相同的)如何获取匹配的前缀)。我尝试过以下但是它不起作用:

$numbers  = array('3284121532', '3478795687'); // the subject
$prefixes = array('328', '347');               // (will be) the pattern

// Build regex for each element of $prefix array
$pattern = array_map(function($s) { return "/^$s/"; }, $prefixes);
$replace = "39\{$1}";

var_dump(preg_replace($pattern, $replace, $numbers);

任何帮助都将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:2)

$numbers  = array(3284121532, 3478795687);
$prefixes = implode('|',array(328, 347));

$numbers = array_map(function($n) use ($prefixes) {
    return preg_replace("/^($prefixes)/", '39$1', $n);
}, $numbers);

print_r($numbers);

以上将输出

Array
(
    [0] => 393284121532
    [1] => 393478795687
)

答案 1 :(得分:0)

只需在单引号中使用$1

$replace = '39$1;

你可以用

做到这一点
$results = array_map(function($s) { 
    return preg_replace("/^(".join('|' . $prefixes) . "\d+)/", '39$1', $s); 
}, $numbers );

答案 2 :(得分:0)

如果您想在替换中加入整个匹配项,可以使用$0

$replace = '39$0';