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">';
?>
Ստացեք այս թեգի ատրիբուտների անունների զանգված: