Düzenli ifadelerle değiştirme işlemlerinde cepler (capture groups) PHP'de
preg_replace fonksiyonu ile çalışırken,
eğer regex içinde bir şeyi bir cepte (capture group) yakalarsak,
değiştirme dizgisinde, dolar işareti $ ve cebin
numarasını yazarak bu cebin içeriğini ekleyebiliriz.
Örneğin, $0 - sıfırıncı cep (tüm eşleşme),
$1 - birinci cep, $2 - ikinci
cep ve bu şekilde devam eder.
Bunun ne işe yaradığını ve nasıl kullanıldığını örnekler üzerinden inceleyelim.
Örnek
Tüm sayıları bulalım ve onların yerine aynı sayıları, ancak süslü parantezler içinde ekleyelim. Bunun için bulunan tüm sayıları, kendileriyle ancak süslü parantezler içinde değiştireceğiz:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Sonuç olarak değişkene aşağıdaki yazılacaktır:
'{1} {23} {456} xax'
Örnek
Etrafında 'x' ler bulunan
sayı dizilerini bulalım ve bu
sayıları, kendileriyle ancak '!' işaretleri içinde değiştirelim:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Sonuç olarak değişkene aşağıdaki yazılacaktır:
'!1! !23! !456! xax'
Örnek
Şu görevi çözelim: 'aaa@bbb' formatında dizeler verilsin
- harfler, sonra @ işareti,
sonra tekrar harfler. @ işaretinden önceki ve sonraki
harflerin yerlerini değiştirmemiz gerekiyor. Şu şekilde gerçekleştirelim:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Sonuç olarak değişkene aşağıdaki yazılacaktır:
'bbb@aaa ddd@ccc'
Pratik Görevler
Bir dize verilsin:
<?php
$str = '12 34 56 78';
?>
Tüm iki basamaklı sayılardaki rakamların yerlerini değiştirin.
Bir tarih dizesi verilsin:
<?php
$str = '31.12.2025';
?>
Bu tarihi '2025.12.31' formatına dönüştürün.