Iki normal ifadeler kullanarak bir dizi öğelerini değiştirme

4 Cevap php

Can you use two regex in preg_replace to match and replace items in an array? So for example:

Sahip varsayalım:

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
}

ve regex dizeleri tutan iki değişken vardır:

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

I can:

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

Dizinin her endeksinde "9bc0d67a-0@acoregroup.com" ile: "9bc0d67a-0@acoregroup.com mailto" değiştirilmesi için.

4 Cevap

Bu deneyebilirsiniz:

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

Haven't tested

Buraya bakın: http://php.net/manual/en/function.preg-replace.php

foreach($array as $ind => $value)
  $array[$ind] = preg_replace('/mailto:([\w-]+@([\w-]+\.)+[\w-]+)/i', '$1', $value);

EDIT: preg_replace içinde döngü hareket nedeniyle gahooa çözümü, muhtemelen daha iyidir.

Ikamesinin bu tür için, bu mutch olduğunu str_replace kullanmalısınız hızlı and strongly suggested by the online documentation:

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

Diğerleri zaten belirttiğimiz gibi ben, sen '$ 1' submatch gruplar arıyoruz olduğunu düşünüyorum. Ama neden sadece aşağıdaki yapamazsınız:

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

Aslında, sizin regex olarak görme kullanımına izin vermez ':' her yerde e-posta adresleri, sizinle yapabileceğini basit bir str_replace():

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