PHP регуляр ифодаларда олддин қараш
Баъзан шундай типдаги масалани ечиш керак бўлади: сатр
'aaa' ни топиш ва уни '!' га алмаштириш,
лекин факат 'aaa' дан кейин
'x' турганда, 'x' ни ўзини эса
алмаштириш керак эмас. Агар биз масалани
'тўғридан-тўғри' ечишга ҳаракат қилсак, у ҳолда ҳеч нарса чиқмайди:
<?php
preg_replace('#aaax#', '!', 'aaax'); // '!' бўлади, лекин '!x' бўлиши керак
?>
Масалани ечиш учун 'x' ни алмаштириш керак эмаслигини
айтиб берадиган усул керак. Бу (?= ) махсус қавслари
орқали бажарилади, улар факат қарайди, лекин ўзлари билан олмайди.
Бу қавслар ижобий олддин қараш деб аталади. Ижобий - чунки
'x' (бизнинг ҳолатимизда) бўлиши керак - факат шунда
алмаштириш амалга ошади.
Келинг, бизнинг масаламизни ечиш учун ушбу қавслардан фойдаланамиз:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // '!x' қайтаради
?>
Салбий олддин қараш ҳам мавжуд
- (?! ) - у, аксінча, бирор нарса бўлмаслиги кераклигини айтади.
Кейинги мисолда алмаштириш факат 'aaa' дан кейин
'x' турмагандагина амалга ошади:
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // '!b' қайтаради
?>
Функция номларини ўз ичига олган сатр берилган:
<?php
$str = 'func1() func2() func3()';
?>
Сатрдан функция номлари массивини олинг.
Тег билан сатр берилган:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Ушбу тегнинг атрибут номлари массивини олинг.