не работает preg_replace при поиске

Select

Новичок
PHP:
<?php
if (file_exists("blocks/bd.php")) { require_once("blocks/bd.php"); }


function dropBackWords($word) { //тут мы обрабатываем одно слово
	$reg = "/(ый|ой|ая|ое|ые|ому|а|о|у|е|ого|ему|и|ство|ых|ох|ия|ий|ь|я|он|ют|ат)$/i"; //данная регулярная функциях будет искать совпадения окончаний
	[B]$word = preg_replace($reg,'',$word);[/B] //убиваем окончания
	
	return $word;
}

function stopWords($query) { //тут мы обрабатываем весь поисковый запрос
    
	$reg = "/\s(под|много|что|когда|где|или|которые|поэтому|все|будем|как)\s/gim"; //данная регулярка отрежет все стоп-слова отбитые пробелами

   [B] $query = preg_replace($reg,'',$query);[/B] //убиваем стоп-слова

	return $query;
}

function explodeQuery($query) { 	//функция вызова поисковой строки
	$query = stopWords($query); 	//используем написанную нами ранее функцию для удаления стоп-слов
	$words = explode(" ",$query); 	//разбиваем поисковый запрос на слова через пробел и заносим все слова в массив
	$i = 0; 						//устанавливаем начало массива в 0, помним что нумерация в массивах начинается с 0
	$keywords = ""; 				//создаем пустой массив
	foreach ($words as $word) { 	//в цикле для массива words создаем элемент word
		$word = trim($word);		
		if (strlen($word)<6) {		//если слово короче 6 символов то убиваем его
			unset($word);
		}
		else {						//иначе выполняем следующее
			if (strlen($word)>8) {
				$keywords[$i]=dropBackWords($word);	//наша функция чистки окончаний для слов длинее 8 символов и занесение их в созданный нами массив
				$i++;								//наращиваем значение i для того чтобы перейти к следующему элементу
			}
			else {
                $keywords[$i]=$word; 				//если короче 8 символов то просто добавляем в массив
                $i++;
            }
		}
	}
	return $keywords; //возвращаем полученный массив
}

function colorSearchWord($word, $string, $color) {
	$replacement = "<span style='color:".$color."; border-bottom:1px dashed ".$color.";'>".$word."</span>";
	$result = str_replace($word, $replacement, $string);
	return $result;
}

function searchResult($materials, $keywords) {
	foreach ($materials as $material) { //Выше мы сформировали массив $materials который мы теперь выводим разбивая на элементы массива $material
		$title = htmlspecialchars(strip_tags($material[title]));	//Тут мы чистим все значения массива - title, text и keywords от тегов и посторонних символов
		$text = htmlspecialchars(strip_tags($material[text]));		//как вариант можно еще все слова перевести в нижний регистр
		$key = htmlspecialchars(strip_tags($material[keywords]));
		$wordWeight =0; //вес слова запроса приравниваем к 0
		foreach ($keywords as $word) { 	//теперь для каждого поискового слова из запроса ищем совпадения в тексте
			$reg = "/(".$word.")/"; 	//маска поиска для регулярной функции
			/* 	
            	Автоматически наращиваем вес слова для каждого элемента массива.
				Так же сюда можно включить например поле description если оно у вас есть.
                Оставляем переменную $out, которая выводит значение поиска. Она нам может и не пригодится, но пусть будет, может быть вы найдете ей применение.
			*/
			$wordWeight = preg_match_all($reg, $title, $out);	//как вариант можно еще для слов в заголовке вес увеличивать в два раза
			$wordWeight += preg_match_all($reg, $text, $out);	//но это вам понадобиться если вы будете выводить материалы в порядке убывания по релевантности
			$wordWeight += preg_match_all($reg, $key, $out);	//мы же пока этого делать не будем
			$material[relevation] += $wordWeight; //увеличиваем вес всего материала на вес поискового слова
			
			//раскрашиваем найденные слова функцией, которую мы писали в первой части урока
			$title = colorSearchWord($word, $title, "violet");
			$text = colorSearchWord($word, $text, "violet");
			$key = colorSearchWord($word, $key, "violet"); //незнаю зачем ключевые слова окрасил, их ведь не обязательно выводить пользователю :)
		}
        //Теперь ищем те материалы, у которых временный атрибут relevation не равен 0
		if($material[relevation]!=0) {
			//Возвращаем массивы в нормальное состояние с уже обработанными данными
			$material[title] = $title;
			$material[text] = $text;
			$material[keywords] = $key;
			echo "результат:"; simpleToTamplate($material, "search_result"); //новая функция, которая вернет нам шаблон с результатами поиска
			
		}
        //Иначе просто грохаем весь элемент material за ненадобностью
		else {
			unset($material);
		}
	}
}

if(isset($_REQUEST["search_word"])) { 

	$query = trim($_REQUEST["search_word"]); //делаем небольшую чистку, можете добавить еще защиту от различных инъекций и подозрительных переменных, которые могут ввести вам вредные пользователи
	print_r($keywords = explodeQuery($query)); //тут наша функция с первой части урока
	
	$sql = "SELECT id,title,text,description  FROM pages "; //ищем только опубликованные материалы
	$result = mysql_query($sql);
	if ($mysql_num_rows($result)!=0) { //проверяем наличие записей, если нет, то естественно ничего не выведем и прекратим любую работу системы
		while($row = mysql_fetch_assoc($result))
		{
			$materials[$row[id]] = $row; //Формируем массив $materials с найденными материалами
		}
       searchResult($materials,$keywords); //выводим наш результат поиска, функцию мы рассмотрим ниже
	}
    else {
    	echo "напишем тут какую-нибудь ошибку для пользователя";
    }
}


function simpleToTamplate($value, $tamplate) {
	echo $value;
	echo $tamplate;
	/*	ob_start(); // Включаем буферизацию вывода, чтобы шаблон не вывелся в месте вызова функции
		// Подключаем необходимый нам шаблон, который просто ждет наш массив
		include('tamplates/'.$tamplate.'.tpl'); 
		return ob_get_clean(); //Возвращаем результат буфера и очищаем его */
	}
	
?>

Для полного представления выложил весь код, который есть
Здесь имеется поиск из БД... Вот тут есть разжеванный код всего этого
http://ruseller.com/project.php?id=2

Помогите понять почему не работает preg_replace, выделил жирным то самое место
 
Сверху