PHP Regular Ifodalarida Oldindan Ko'rish
Ba'zan quyidagi turdagi masalani hal qilish kerak bo'ladi:
'aaa' satrini toping va uni '!' bilan almashtiring,
lekin faqat 'aaa' dan keyin 'x'
turgan paytda, 'x' ning o'zini esa almashtirmang. Agar biz
masalani "o'ng qo'l bilan" hal qilishga harakat qilsak, hech narsa chiqmaydi:
<?php
preg_replace('#aaax#', '!', 'aaax'); // '!' bo'ladi, lekin '!x' bo'lishi kerak
?>
Masalani hal qilish uchun 'x' ni almashtirish shart emasligini
aytish usuli kerak. Buning uchun (?= ) maxsus qavslari ishlatiladi,
ular faqatgina ko'radi, lekin o'zi bilan olib ketmaydi.
Ushbu qavslar ijobiy oldindan ko'rish deb ataladi. Ijobiy - chunki
'x' (bizning holatimizda) bo'lishi kerak - faqat shunda
almashtirish amalga oshiriladi.
Keling, ushbu qavslarni bizning masalamizni hal qilish uchun qo'llaymiz:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // '!x' ni qaytaradi
?>
Salbiy oldindan ko'rish ham mavjud
- (?! ) - u, aksincha, biror narsa bo'lmasligi kerakligini bildiradi. Quyidagi misolda
almashtirish faqat 'aaa' dan keyin
'x' turmagan paytda amalga oshiriladi:
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // '!b' ni qaytaradi
?>
Funksiya nomlarini o'z ichiga olgan satr berilgan:
<?php
$str = 'func1() func2() func3()';
?>
Satten funksiya nomlaridan iborat massiv oling.
Teg bilan satr berilgan:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Ushbu tegning atribut nomlaridan iborat massiv oling.