Prehľad dopredu v regulárnych výrazoch PHP

Niekedy je potrebné vyriešiť úlohu tohto typu: nájsť reťazec 'aaa' a nahradiť ho '!', ale len vtedy, ak za 'aaa' nasleduje 'x', pričom samotné 'x' sa nenahrádza. Ak sa pokúsime úlohu vyriešiť 'priamo', nič sa nám nepodarí:

php<?php
  preg_replace('#aaax#', '!', 'aaax'); // bude '!', ale má byť '!x'
?>

Na vyriešenie úlohy je potrebný spôsob, ako povedať, že 'x' by sa nemalo nahradiť. Robí sa to pomocou špeciálnych zátvoriek (?= ), ktoré len prehliadajú, ale neberú so sebou.

Tieto zátvorky sa nazývajú pozitívny prehľad dopredu. Pozitívny - pretože 'x' (v našom prípade) musí byť prítomný - len vtedy dôjde k nahradeniu.

Použime tieto zátvorky na vyriešenie našej úlohy:

php<?php
  preg_replace('#aaa(?=x)#', '!', 'aaax'); // vráti '!x'
?>

Existuje aj negatívny prehľad dopredu - (?! ) - ten naopak hovorí, že niečo by nemalo byť prítomné. V nasledujúcom príklade k nahradeniu dôjde len vtedy, ak za 'aaa' nenasleduje 'x':

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

Daný je reťazec obsahujúci názvy funkcií:

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

Získajte pole mien funkcií z reťazca.

Задание 2

Daný je reťazec s tagom:

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

Získajte pole mien atribútov tohto tagu.