Замена Word без учета регистра Word

Хорошо, я пытаюсь сделать поисковые запросы полужирным шрифтом в этом скрипте поиска, который я делаю, за исключением того, что я не могу заставить его работать без учета регистра.

function highlight($term,$target){ $terms = explode(" ", $term); foreach($terms as $term){ $result = (eregi_replace($term, "<strong>$term</strong>", $target)); } return $result; } 

Это функция, которой я располагаю до сих пор. На PHP.net говорится, что eregi_replace не зависит от регистра, но по какой-то причине он явно не работает. (Я ноб).

Есть идеи? : D

Регулярные выражения ereg_* (POSIX) устаревают с PHP 5.3 и не были предложены в течение длительного времени. Лучше использовать функции PCRE ( preg_* ) (например, preg_replace ).

Вы можете сделать это, создав не зависящее от регистра регулярное выражение, а затем завершая совпадения в тегах <strong> :

 function highlight($term, $target) { $terms = array_unique(explode(" ", $term)); // we only want to replace each term once foreach ($terms as $term) { $target = preg_replace('/\b(' . preg_quote($term) . ')\b/i', "<strong>$1</strong>", $target); } return $target; } 

То, что это делает, это первый вызов preg_quote на ваш $term так что, если в выражении есть какие-либо символы, имеющие смысл в регулярном выражении, они экранируются, а затем создают регулярное выражение, которое ищет этот термин, окруженный границами слов ( \b – так что, если термин «хороший», он не будет соответствовать «до свидания»). Этот термин заключен в круглые скобки, чтобы заставить механизм регулярных выражений использовать термин в его существующей форме как «обратную ссылку» (способ, по которому механизм регулярных выражений зависает на части соответствия). Выражение сделано нечувствительным к регистру, указав параметр i . Наконец, он заменяет любые совпадения той же обратной связью, окруженной тегом <strong> .

 $string = "The quick brown fox jumped over the lazy dog. The quicker brown fox didn't jump over the lazy dog."; $terms = "quick fox"; highlight($terms, $string); // results in: The <strong>quick</strong> brown <strong>fox</strong> jumped over the lazy dog. The quicker brown <strong>fox</strong> didn't jump over the lazy dog. 

Если вы хотите получить хороший учебник по регулярным выражениям, ознакомьтесь с учебным пособием на сайте regular-expressions.info .

 function highlight($term,$target) { $terms = explode(" ", $term); foreach($terms as $term){ $target = (str_ireplace($term, "<strong>$term</strong>", $target)); } return $target; }