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">';
?>

Бул тегдин атрибуттарынын аталыштарынын массивин алыңыз.