preg_replace ve highlight_string
php kodlarını renklendirmeye çalışırken farkettim ki preg_replace içinde highlight_string kullanamıyormuşuz. peki o zaman ne yapacağız? işte burada devreye preg_replace_callback fonksiyonu giriyor.
örneklerle açıklayacak olursam:
normal şartlarda aklınıza ilk gelecek kod şu olacaktır.
<?php
$string = '
<?php
$foo = "bar";
echo $foo;
?>
';
$string = preg_replace("'\<\?php(.*)\?\>'imxsU", highlight_string("\\1"), $string);
echo $string;
?>
ekran çıktısı:
\1
gördüğünüz gibi ekrana renklendirilmiş kodumuzu değil renklendirilmiş \1 değerini basıyor.
çözüm için preg_replace_callback kullanmamız gerekiyor. öncelikle renklendirme için bir fonksiyon tanımlıyoruz:
<?php
function highlight($matches)
{
return highlight_string($matches[0], true);
}
$string = '
<?php
$foo = "bar";
echo $foo;
?>
';
$string = preg_replace_callback("'\<\?php(.*)\?\>'imxsU", "highlight", $string);
echo $string;
?>
çıktısı:
<?php
$foo = "bar";
echo $foo;
?>