2010-02-18 3 views
0

웹 사이트 &에서 데이터베이스 검색 결과를 검색하면 검색된 용어와 일치하는 결과가 강조 표시됩니다. 아래는 내가 (PHP에서) 지금까지 무엇을 가지고 :정규식을 사용하여 앵커 태그를 손상시키지 않고 PHP의 검색 조건을 강조하십시오.

$highlight = trim($highlight); 
if(preg_match('|\b(' . $highlight . ')\b|i', $str_content)) 
{ 
    $str_content = preg_replace('|\b(' . $highlight. ')(?!["\'])|i', "<span class=\"highlight\">$1</span>", 
    $str_break; 
} 

이 길을가는 단점은 내 검색어뿐만 아니라 URL 영구 링크에 표시하는 경우, 반환 된 결과가 HREF에 범위를 삽입하는 것입니다 anchor 태그를 분리하십시오. 여하튼 내 정규식에서 여는 HTML 태그 사이에 나타나는 검색 결과에서 "모든"정보를 제외시킬 수 있습니까?

나는 strip_tags() 함수를 사용할 수 있으며 일반 텍스트로 결과를 추출 할 수 있지만 필자는 그렇게하지 않을 것이라고 생각합니다.

+0

PS - $ 하이라이트가 조금 더 상세하게 좋을 텐데 검색어 – Schoffelman

답변

0

나는 지금까지이 특정 상황에서 잘 작동하는이 경로를 끝내었다. html 태그없이

<?php 

if(preg_match('|\b(' . $term . ')\b|i', $str_content)) 
{ 
    $str_content = strip_tags($str_content); 
    $str_content = preg_replace('|\b(' . $term . ')(?!["\'])|i', "<span class=\"highlight\">$1</span>", $str_content); 
    $str_content = preg_replace('|\n[^<]+|', '</p><p>', $str_content); 
    break; 
} 

?> 
그것은 여전히 ​​인코딩 된 HTML 것

하지만 지금 통해 구문 분석 할 쉽게

+0

여기 정규식은 원래 게시물의 정규식과 동일합니다. 그리고 왜 따옴표에 대한 부정적 예측이 필요합니까? –

0

내가 주장하는 것은 당신이 찾고있는 것이라고 생각합니다.

+2

의 위생적 버전입니다 가정합니다. 실제로, 그 * 많은 * 세부 사항을 만드십시오. –

4

은하지 정규 표현식으로 HTML을 구문 분석하려고 DO :
RegEx match open tags except XHTML self-contained tags

것은 PHP Simple HTML DOM 같은 것을보십시오.

<?php 
// get DOM 
$html = file_get_html('http://www.google.com/search?q=hello+kitty'); 

// ensure this is properly sanitized. 
$term = trim($term); 

// highlight $term in all <div class="result">...</div> elements 
foreach($html->find('div.result') as $e){ 
    echo str_replace($term, '<span class="highlight">'.$term.'</span>', $e->plaintext); 
} 
?> 

참고 :이 나는 ​​당신의 HTML이 어떻게 생겼는지 모르겠지만,이 트랙에있는에 당신이 아주 가까이 놓아야하기 때문에를 정확한 해결책이 아니다.

+1

+1. 정규식이 트릭을 수행 할 수도 있고 그렇지 않을 수도 있지만이 방법은 더 간단하고 유지 관리가 훨씬 쉽습니다. –

+0

동의 함. Regex는 HTML 구문 분석에 적합하지 않습니다. 그것을 위해 설계된 적이 없었습니다. –

+0

나는 Regex가 HTML을 파싱하는 데는 적합하지 않지만,이 솔루션을 구현 한 후에는 정규식을 사용하기 전에 html 태그를 제거한 다음 일반 텍스트 버전의 검색 결과를 뱉어 낼 수도 있습니다. 이 경로를 사용하여 페이지를로드하는 데 걸린 시간은 regex'ng보다 상당히 오래 걸립니다. – Schoffelman

관련 문제