Framåtblickande i PHP reguljära uttryck

Ibland behöver man lösa en uppgift av denna typ: hitta strängen 'aaa' och ersätt den med '!', men bara om efter 'aaa' står 'x', och själva 'x' ska samtidigt inte ersättas. Om vi försöker lösa uppgiften 'direkt' kommer det inte att lyckas:

php<?php
  preg_replace('#aaax#', '!', 'aaax'); // blir '!', men ska vara '!x'
?>

För att lösa uppgiften behövs ett sätt att säga, att 'x' inte ska ersättas. Detta görs med hjälp av speciella parenteser (?= ), vilka bara tittar, men inte tar med sig.

Dessa parenteser kallas positiv framåtblick . Positiv - eftersom 'x' (i vårt fall) måste finnas - bara då kommer ersättningen att ske.

Låt oss använda dessa parenteser för att lösa vår uppgift:

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

Det finns också negativ framåtblick - (?! ) - den säger, tvärtom, att något inte ska finnas. I följande exempel kommer ersättningen att ske, bara om efter 'aaa' inte står 'x':

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

Given är en sträng som innehåller funktionsnamn:

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

Få en array med funktionsnamn från strängen.

Задание 2

Given är en sträng med en tagg:

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

Få en array med namnen på attributen för denna tagg.