Lookahead di Regex PHP
Terkadang kita perlu menyelesaikan masalah seperti ini: temukan
string 'aaa' dan ganti dengan '!',
tetapi hanya jika setelah 'aaa' terdapat
'x', sedangkan 'x' itu sendiri
tidak diganti. Jika kita mencoba menyelesaikan masalah
secara langsung, kita tidak akan berhasil:
<?php
preg_replace('#aaax#', '!', 'aaax'); // akan menjadi '!', seharusnya '!x'
?>
Untuk menyelesaikan masalah ini, diperlukan cara untuk mengatakan
bahwa 'x' tidak boleh diganti. Hal ini
dilakukan dengan menggunakan kurung khusus (?= ),
yang hanya melihat, tetapi tidak mengambil.
Kurung ini disebut positive lookahead. Positif - karena 'x'
(dalam kasus kita) harus ada - hanya kemudian
penggantian akan terjadi.
Mari kita terapkan kurung ini untuk menyelesaikan masalah kita:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // mengembalikan '!x'
?>
Ada juga negative lookahead
- (?! ) - ini, sebaliknya, mengatakan bahwa
sesuatu harus tidak ada. Dalam contoh berikutnya
penggantian akan terjadi, hanya jika setelah 'aaa'
tidak terdapat 'x':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // mengembalikan '!b'
?>
Diberikan sebuah string yang berisi nama fungsi:
<?php
$str = 'func1() func2() func3()';
?>
Dapatkan array nama fungsi dari string.
Diberikan sebuah string dengan tag:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Dapatkan array nama atribut dari tag ini.