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