preg_*() functions utilize many aspects that people don't use. And I don't know why.
To start with, what you are looking for is called the word boundary. You only want it to search for 'hell', not 'hello'. You can use a word bound for this. Oh, preg matching/replacing calls this with a \b. But don't hardcode this. The reason why is simple, say now you take a word like @$$ (don't know if its censored here, so we don't want to lose it). If you word boundary that search, it will only find @$$, not @$$hole for instance. So I would recommend creating it so that it stored within your curly braces for bounded words:
Then preg replace using boundary's if your curly braces are found, without if not found.
Hope this gives you an idea of what to look for!