Pogled napred u PHP regularnim izrazima

Ponekad je potrebno rešiti problem ovog tipa: pronaći string 'aaa' i zameniti ga sa '!', ali samo ako iza 'aaa' stoji 'x', a sam 'x' pritom ne zameniti. Ako pokušamo da rešimo problem 'direktno', nećemo uspeti:

php<?php
  preg_replace('#aaax#', '!', 'aaax'); // biće '!', a treba '!x'
?>

Za rešavanje zadatka potreban je način da se kaže, da 'x' ne treba zameniti. To se radi pomoću specijalnih zagrada (?= ), koje samo 'gledaju', ali ne uzimaju sa sobom.

Ove zagrade se zovu pozitivni pogled napred (positive lookahead). Pozitivni - jer 'x' (u našem slučaju) mora da postoji - samo tada će se izvršiti zamena.

Hajde da primenimo ove zagrade za rešavanje našeg zadatka:

php<?php
  preg_replace('#aaa(?=x)#', '!', 'aaax'); // vratiće '!x'
?>

Postoji i negativni pogled napred (negative lookahead) - (?! ) - on, obrnuto, govori da nečega ne sme biti. U sledećem primeru zamena će se izvršiti, samo ako iza 'aaa' ne stoji 'x':

php<?php
  preg_replace('#aaa(?!x)#', '!', 'aaab'); // vratiće '!b'
?>
Задание 1

Dat je string koji sadrži imena funkcija:

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

Preuzmite niz imena funkcija iz stringa.

Задание 2

Dat je string sa tagom:

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

Preuzmite niz imena atributa ovog taga.