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">';
?>
Бул тегдин атрибуттарынын аталыштарынын массивин алыңыз.