Прагляд наперад у рэгулярках 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">';
?>

Атрымайце масіў імёнаў атрыбутаў гэтага тэга.