PHP-ում ռեգուլյար արտահայտությունների դիմացի դիտում

Երբեմն անհրաժեշտ է լինում լուծել այսպիսի առաջադրանք. գտնել 'aaa' տողը և փոխարինել այն '!'-ով, բայց միայն այն դեպքում, եթե 'aaa'-ից հետո կա 'x', իսկ ինքը՝ 'x'-ը, այդ դեպքում չփոխարինել: Եթե փորձենք առաջադրանքը լուծել 'ուղիղ', ապա մեզնից ոչինչ չի ստացվի.

php<?php
  preg_replace('#aaax#', '!', 'aaax'); // կլինի '!', իսկ պետք է '!x'
?>

Առաջադրանքը լուծելու համար անհրաժեշտ է եղանակ ասելու, որ 'x'-ը չպետք է փոխարինել: Դա արվում է հատուկ փակագծերի օգնությամբ (?= ), որոնք պարզապես նայում են, բայց իրենց հետ չեն վերցնում:

Այս փակագծերը կոչվում են դրական դիմացի դիտում: Դրական - քանի որ 'x'-ը (մեր դեպքում) պետք է լինի - միայն այդ ժամանակ կկատարվի փոխարինումը:

Եկեք կիրառենք այս փակագծերը մեր առաջադրանքը լուծելու համար.

php<?php
  preg_replace('#aaa(?=x)#', '!', 'aaax'); // կվերադարձնի '!x'
?>

Կա նաև բացասական դիմացի դիտում - (?! ) - այն, ընդհակառակը, ասում է, որ ինչ-որ բան չպետք է լինի: Հաջորդ օրինակում փոխարինումը կկատարվի, միայն եթե 'aaa'-ից հետո չկա 'x'.

php<?php
  preg_replace('#aaa(?!x)#', '!', 'aaab'); // կվերադարձնի '!b'
?>
Задание 1

Տրված է տող, որը պարունակում է ֆունկցիաների անուններ.

php<?php
  $str = 'func1() func2() func3()';
?>

Ստացեք ֆունկցիաների անունների զանգված տողից:

Задание 2

Տրված է տող թեգով.

php<?php
  $str = '<a href="" class="eee" id="zzz">';
?>

Ստացեք այս թեգի ատրիբուտների անունների զանգված: