Хорошо, я пытаюсь сделать поисковые запросы полужирным шрифтом в этом скрипте поиска, который я делаю, за исключением того, что я не могу заставить его работать без учета регистра.
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; }