değiştirmeden önce fonksiyonu sayesinde preg_replace geçiren maç

2 Cevap php

Bu yapmak istediğim budur:

$line = 'blabla translate("test") blabla';
$line = preg_replace("/(.*?)translate\((.*?)\)(.*?)/","$1".translate("$2")."$3",$line);

Yani sonuç "test" çeviri ile değiştirilir ("test") olduğunu çevirmek olmalıdır.

Sorun şu ki çevirmek işleve string "$ 2" geçer ("$ 2") çevirmek olduğunu. Yani (translate) yerine "test", "$ 2" çevirmek için çalışır.

Değiştirmeden önce bir işleve maçın değerini geçmek için bazı yolu var mı?

2 Cevap

preg_replace_callback arkadaşın

  function translate($m) {
     $x = process $m[1];
     return $x;
  }

  $line = preg_replace_callback("/translate\((.*?)\)/", 'translate', $line);

: Sen olarak preg_replace_callback işlevini kullanabilirsiniz

$line = 'blabla translate("test") blabla';
$line = preg_replace_callback("/(.*?)translate\((.*?)\)(.*?)/",fun,$line);

function fun($matches) {    
 return $matches[1].translate($matches[2]).$matches[3];    
}