Предвиђање напред у регуларним изразима 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">';
?>

Добијте низ имена атрибута овог тага.