PHP Düzenli İfadelerde İleri Bakış
Bazen şu tür bir görevi çözmek gerekir:
'aaa' dizisini bul ve '!' ile değiştir,
ancak yalnızca 'aaa' dizisinden sonra
'x' geliyorsa, ve 'x''in kendisi
değiştirilmesin. Eğer görevi 'doğrudan' çözmeye
çalışırsak, başarılı olamayız:
<?php
preg_replace('#aaax#', '!', 'aaax'); // '!' olur, oysa '!x' olmalı
?>
Görevi çözmek için, 'x''in değiştirilmemesi
gerektiğini söylemenin bir yolu gerekir. Bu,
sadece bakar ama kendisiyle birlikte almaz olan
(?= ) özel parantezleri kullanılarak yapılır.
Bu parantezlere pozitif ileri bakış denir.
Pozitif - çünkü 'x' (bizim durumumuzda)
olmalıdır - ancak o zaman değişiklik gerçekleşir.
Haydi görevimizi çözmek için bu parantezleri kullanalım:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // '!x' döndürür
?>
Ayrıca negatif ileri bakış da vardır
- (?! ) - o, tam tersine, bir şeyin
olmaması gerektiğini söyler. Aşağıdaki örnekte,
değişiklik yalnızca 'aaa' dizisinden sonra
'x' gelmiyorsa gerçekleşir:
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // '!b' döndürür
?>
Fonksiyon isimlerini içeren bir dize verilmiştir:
<?php
$str = 'func1() func2() func3()';
?>
Dizeden fonksiyon isimlerinin bir dizisini elde edin.
Bir etiket içeren bir dize verilmiştir:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Bu etiketin öznitelik isimlerinin bir dizisini elde edin.