ereg_*
(POSIX 정규 표현식) 기능은 PHP 5.3로 deprecated하고 오랫동안 제시되어 있지 않다. 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;
}
그래서 당신 $term
에 첫 번째 통화 preg_quote
을하다 어떤 문자가있는 경우 그 용어에서 정규 표현식의 의미를 지니고 있으면 이스케이프 처리 된 다음 단어 경계로 둘러싸인 해당 용어를 찾는 정규 표현식을 만듭니다 (\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에 튜토리얼을 확인하세요.
'str_ireplace'는 사용자가'clock'을 검색하면 텍스트의'Clock'을'clock'으로 변환합니다. 좋지 않은 옵션입니다. –
좋은 지적, 나는 나의 대답을 업데이트 할 것이다. –
@Pekka, 그는 대소 문자를 구분하지 않는 일치를 물었습니다. 왜 좋은 옵션이 아닌가요? 그것은 단지 그것을합니다. –