Exceções dentro de conjuntos em expressões regulares no PHP

Você já sabe que os metacaracteres dentro de [] se tornam caracteres comuns. No entanto, existem exceções: se você precisar de colchetes como caracteres, eles precisam ser escapados com uma barra invertida.

Por exemplo, no seguinte código, o padrão de busca é assim: entre os 'x' há um colchete:

php<?php
  $str = 'x]x xax x[x x1x';
  $res = preg_replace('#x[\[\]]x#', '!', $str);
?>

Como resultado, o seguinte será armazenado na variável:

php'! xax ! x1x'
Задание 1

Dada a string:

php<?php
  $str = 'x[]z x{}z x.z x()z';
?>

Escreva uma expressão regular que encontre todas as palavras seguindo o padrão: letra 'x', depois qualquer quantidade de qualquer tipo de colchetes, depois a letra 'z'.

Задание 2

Dada a string:

php<?php
  $str = '[abc] {abc} abc (abc) [abc]';
?>

Escreva uma expressão regular que encontre as strings dentro de quaisquer colchetes e as substitua por '!'.