Абмежаванне прагнасці ў рэгулярках у PHP

Рэгулярныя выразы па змаўчанні прагныя. Гэта значыць, што яны захопліваюць максімальна магчымая колькасць сімвалаў.

Давайце разбярэм на прыкладзе. Хай у нас ёсць вось такая радок:

php<?php
  $str = 'aeeex zzz x kkk';
?>

Хай мы ў гэтай радку хочам знайсці падрадок 'aeeex' па наступным шаблоне: літара 'a', затым любы сімвал адзін ці больш раз, затым літара 'x'.

php<?php
  $res = preg_replace('#a.+x#', '!', $str);
?>

Мы чакаем, што ў зменную ў выніку запішацца радок '! zzz x kkk'. Аднак, гэта не так - у зменную трапляе радок '! kkk'.

Уся справа ў тым, што наша рэгулярка шукае ўсе сімвалы ад літары 'a' да літары 'x'. Але ў нашай радку дзве літары 'x'. З-за прагнасці атрымліваецца, што рэгулярка шукае да самага апошняга ікса, тым самым захопліваючы не тое, што мы чакалі.

Вядома, часта такая паводзіны нам і трэба. Але канкрэтна ў гэтым выпадку мы б хацелі адмяніць прагнасць і сказаць рэгулярцы, каб яна шукала да першага ікса.

Каб абмежаваць прагнасць, трэба пасля аператара паўтарэння паставіць знак пытання:

php<?php
  $res = preg_replace('#a.+?x#', '!', $str);
?>

Прагнасць можна абмяжоўваць усём аператарам паўтарэння, вось так: *?, ?? і {}?.

Задание 1

Дадзена радок:

php<?php
  $str = 'aba accca azzza wwwwa';
?>

Напішыце рэгулярку, якая знойдзе ўсе радкі па краях якіх стаяць літары 'a', і замяніць кожную з іх на '!'. Паміж літарамі a можа быць любы сімвал (акрамя 'a').