Замена элементов в массиве с использованием двух регулярных выражений - PullRequest
1 голос
/ 09 июля 2009

Можете ли вы использовать два регулярных выражения в 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 ]

3 голосов
/ 09 июля 2009

Вы можете попробовать это:

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

Не проверял

Смотрите здесь: http://php.net/manual/en/function.preg-replace.php

1 голос
/ 09 июля 2009

Для этого типа замещения вы должны использовать str_replace, это намного быстрее и настоятельно рекомендуется в онлайн-документации :

   $array = str_replace('mailto:', '', $array);
1 голос
/ 09 июля 2009

Я думаю, что вы ищете группы соответствия $ 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);
1 голос
/ 09 июля 2009
foreach($array as $ind => $value)
  $array[$ind] = preg_replace('/mailto:([\w-]+@([\w-]+\.)+[\w-]+)/i', '$1', $value);

РЕДАКТИРОВАТЬ: решение gahooa, вероятно, лучше, потому что оно перемещает цикл внутри preg_replace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...