Actually, preg_replace() can solve Dotan Cohen's problem. There was just a minor mistake in the code.
Please try this:
<?php
function makeLink($title) {
$returnString="<b>$title</b>";
return $returnString;
}
$articleText="This is a very [long] and [stupid] string.";
$articleText=preg_replace('/(\[[a-z]+\])/e', "makeLink('$1')",
$articleText);
print $articleText;
?>

