Php preg_将前缀替换为后缀加上前缀本身

Php preg_将前缀替换为后缀加上前缀本身,php,regex,preg-replace,Php,Regex,Preg Replace,我有一个移动电话$numbers列表,如果号码本身以$prefixes数组中的一个开头,我必须更改它们,并在号码39前面加上前缀 我现在不知道如何反向引用找到的前缀,或者(这是一样的)如何获得匹配的前缀)。我尝试了以下方法,但无效: $numbers = array('3284121532', '3478795687'); // the subject $prefixes = array('328', '347'); // (will be) the pattern

我有一个移动电话
$numbers
列表,如果号码本身以
$prefixes
数组中的一个开头,我必须更改它们,并在号码
39
前面加上前缀

我现在不知道如何反向引用找到的前缀,或者(这是一样的)如何获得匹配的前缀)。我尝试了以下方法,但无效:

$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);

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

只需在单个报价中使用
$1

$replace = '39$1;
你可以用它来做

$results = array_map(function($s) { 
    return preg_replace("/^(".join('|' . $prefixes) . "\d+)/", '39$1', $s); 
}, $numbers );
以上将输出

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

如果要在替换中包含整个匹配项,可以使用
$0

$replace = '39$0';

您没有在代码中的任何地方使用
preg|u replace
。@Kristianantosen抱歉,修复了,谢谢。
$prefixes
数组是动态的,为什么在preg|u replace中使用
328 | 347
?谢谢,很有效,我稍微修改了您的解决方案。基本上,我的错误是没有添加(我想是组)并在引用周围使用
{}
。再次感谢。删除并替换字符串的尾部是没有意义的
preg_replace(“/^($prefixes)/”,'39$1',$n)
可以。忽略。在我写完评论之前,答案已经改变了。手机上没有删除选项!2美元有什么意义?你的正则表达式是
39$1$2
,这是毫无意义的。我不知道为什么会有否决票。似乎是合法的解决方案。太棒了!你刚刚帮我摆脱了困境谢谢!
$replace = '39$0';