PHP の preg_replace 正規表現
( など) は、XXXX 文字列があるかどうかを判断し、その前後の山かっこを置き換えて、最終的に [任意の文字 XXXX 任意の文字] を出力します。 。
-----解決策---------
preg_replace('/<( . *XXXX.*?)>/s','[$1]',$str); //貪欲なマッチングを防ぐ必要はない
------解決策---------
$str = ""; $k = 'XXXX'; echo preg_replace("/<([^>]*?{$k}[^>]*)>/", '[$1]', $str);