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">';
?>

Ушбу тегнинг атрибут номлари массивини олинг.