How to make replacement, only replacing once

Hi guys, below are custom code to replacing text into link, for example

Google text, will be like this [B]Google[/B]
Yahoo text, will be like this [B]Yahoo[/B]

the replacement mod below are working well until now

now i just need a little fix again, to make it better again
i need it now only replacing once, so not too many links if the text appear few times

please share your knowledge guys, how to do that

$words = array(
	'Google' => 'http://www.google.com',
	'Yahoo' => 'http://www.yahoo.com'
);

$exp = array();
$rplc = array();
foreach ($words as $word => $url)
{
	$exp[] = '/ ' . preg_quote($word) . ' /i';
	$rplc[] = ' <argh href="' . $url . '">' . $word . '</argh> ';
}

	$this->post['message'] = preg_replace($exp, $rplc, $this->post['message']);
	$this->post['message'] = preg_replace_callback("#(<a [^>]*>)((?:[^<]|<(?!/?a>)|(?R))+)(</a>)#", create_function('$a', 'return $a[1] . preg_replace("#<argh[^>]*>(.*?)</argh>#", "$1", $a[2]) . $a[3];'), $this->post['message']);
	$this->post['message'] = preg_replace(array('#<argh #', '#</argh>#'), array('<a ', '</a>'), $this->post['message']);

Use the limit parameter: PHP: preg_replace - Manual