검색 결과 강조 표시 : 나는 아래 코드를 사용하여 코퍼스/텍스트의 단어를 검색하고 있습니다. 코드는 PHPFiddle에 있습니다. 완전한 단어 만 일치합니다 (대소 문자를 구분하지 않음). 모든 단어를 찾으면 일치하는 단어가 HTML 앵커 a
태그로 묶여 있습니다. 따라서 궁극적으로 함수를 호출 한 후 코퍼스를 에코하여 검색 결과가 강조된 코퍼스를 가져올 수 있습니다 (사용하는 CSS에 따라 다름).PHP에서 일치하는 내용 검색하기
function highlight($corpus, $words) {
preg_match_all("~\w+~", $words, $m);
if(!$m) return $corpus;
$re = "~\\b(" . implode("|", $m[0]) . ")\\b~i";
return preg_replace($re, "<a href='#'>$0</a>", $corpus);
}
$corpus = "Hello, world! Today is an amazing day!";
echo highlight($corpus, 'hello');
검색 결과 탐색는 : 코퍼스가 큰 경우, 단독으로 강조하는 것은 쉽게 사용자가 일치 통과 할 수 있도록하지 않습니다. 사용자는 예를 들어 다음/이전 버튼을 통해 순서대로 각 일치 항목을 탐색 할 수 있습니다. 이를 위해, 하나 개의 아이디어는 다른 경기로 이동할 수있을 것입니다 내부 링크, 앵커에 즉
...
return preg_replace($re, "<a name='$0' href='#'>$0</a>", $corpus);
...
별도 앵커의 이름 속성을 추가하는 것입니다. 예를 들어 아래 링크를 클릭하면 name='hello'
이라는 앵커로 이동합니다.
<a href="#hello">Hello</a>
문제는 : 내가 가진 문제는 name
속성에 대한 $0
를 사용하여 일치하는 항목이 여러 개있을 수 있기 때문에, 일을하지 않는 것이다. JSFiddle에 더 긴 자료가있는 예를 참조하십시오. preg_replace
을 사용하면서 고유 한 색인 값을 얻을 수있는 방법이 있습니까? 또는 아마도 일치하는 단어가 코퍼스에서 발견 된 위치를 반환 할 수있는 방법이 있습니까? 어쩌면 강조와 탐색을 얻는 또 다른 좋은 방법이있을 것입니다. 입력 해 주셔서 감사합니다
'preg_replace_callback'이 소요 함수를'$ matches'를 인수로 사용한다면'strpos'와 함께 인덱스를 찾을 수 있습니다. – elclanrs