使用两个正则表达式替换数组中的项目

时间:2009-07-09 01:16:15

标签: php regex

你能在preg_replace中使用两个正则表达式来匹配和替换数组中的项吗? 例如:

假设你有:

Array 
(
    [0] => mailto:9bc0d67a-0@acoregroup.com
    [1] => mailto:347c6b@acoregroup.com
    [2] => mailto:3b3cce0a-0@acoregroup.com
    [3] => mailto:9b690cc@acoregroup.com
    [4] => mailto:3b7f59c1-4bc@acoregroup.com
    [5] => mailto:cc62c936-7d@acoregroup.com
    [6] => mailto:5270f9@acoregroup.com
}

你有两个变量持有正则表达式字符串:

$reg = '/mailto:[\w-]+@([\w-]+\.)+[\w-]+/i';
$replace = '/[\w-]+@([\w-]+\.)+[\w-]+/i';
我可以:

preg_replace($reg,$replace,$matches); 

为了在阵列的每个索引中将“mailto:9bc0d67a-0@acoregroup.com”替换为“9bc0d67a-0@acoregroup.com”。

4 个答案:

答案 0 :(得分:3)

你可以试试这个:

$newArray = preg_replace('/mailto:([\w-]+@([\w-]+\.)+[\w-]+)/i', '$1', $oldArray);

尚未测试

见这里:http://php.net/manual/en/function.preg-replace.php

答案 1 :(得分:1)

foreach($array as $ind => $value)
  $array[$ind] = preg_replace('/mailto:([\w-]+@([\w-]+\.)+[\w-]+)/i', '$1', $value);
编辑:gahooa的解决方案可能更好,因为它会在preg_replace中移动循环。

答案 2 :(得分:1)

我认为你正在寻找'$ 1'子匹配组,正如其他人已经指出的那样。但为什么你不能只做以下事情:

// strip 'mailto:' from the start of each array entry
$newArray = preg_replace('/^mailto:\s*/i', '', $array);

事实上,由于您的正则表达式不允许在电子邮件地址中的任何位置使用“:”,您可以使用简单的str_replace()

// remove 'mailto:' from each item
$newArray = str_replace('mailto:', '', $array);

答案 3 :(得分:1)

对于这种类型的替换,你应该使用str_replace它更快and strongly suggested by the online documentation

   $array = str_replace('mailto:', '', $array);