我有一个手机列表$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);
任何帮助都将不胜感激,谢谢。
答案 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';