Forudgående søgning i PHP regulære udtryk

Sommetider skal man løse en opgave af denne type: find strengen 'aaa' og erstat den med '!', men kun hvis der efter 'aaa' står 'x', mens 'x' selv ikke skal erstattes. Hvis vi forsøger at løse opgaven 'direkte', vil det ikke lykkes:

php<?php
  preg_replace('#aaax#', '!', 'aaax'); // bliver '!', men skal være '!x'
?>

For at løse opgaven er der brug for en måde at sige, at 'x' ikke skal erstattes. Dette gøres ved hjælp af specielle parenteser (?= ), der kun kigger, men ikke tager med.

Disse parenteser kaldes positiv forudgående søgning forud. Positiv - fordi 'x' (i vores tilfælde) skal være der - kun så vil erstatningen finde sted.

Lad os anvende disse parenteser til at løse vores opgave:

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

Der findes også negativ forudgående søgning forud - (?! ) - den siger, omvendt, at der skal mangle noget. I det næste eksempel sker erstatningen kun, hvis der ikke står 'x' efter 'aaa':

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

Der gives en streng, der indeholder funktionsnavne:

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

Få et array med funktionsnavne fra strengen.

Задание 2

Der gives en streng med et tag:

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

Få et array med attributnavne for dette tag.