你能在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”。
答案 0 :(得分:3)
你可以试试这个:
$newArray = preg_replace('/mailto:([\w-]+@([\w-]+\.)+[\w-]+)/i', '$1', $oldArray);
尚未测试
答案 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);