2012-10-25 2 views
0

: 및 검색 구문 후 5 개 단어 (단지 Y의이 단어가있는 경우 또는 Y) 5 개 단어 검색 구문 전에PHP가 검색 구문 주위에 10 개 단어를 얻을 나는 다음을 수행하려고

잡아 (또는 Y 텍스트 블록 (I 단어를 말할 때 내가 텍스트의 블록에 어떤 단어 나 숫자를 의미)

예를 들어

텍스트의 블록에서 거기에만 Y 단어)가있는 경우 : 스택에 "에 오신 것을 환영합니다 오버플로! 사용자 이름과 이메일을 설정하려면 사용자 페이지를 방문하십시오. " 당신이 검색 할 수 있다면

"를 방문하여"그것은 반환 : "스택 오버플로에 오신 것을 환영합니다 설정 사용자 페이지를 방문하여"

나는이

$preg_safe = str_replace(" ", "\s", preg_quote($search)); 
$pattern = "/(\w*\S\s+){0,8}\S*\b($preg_safe)\b\S*(\s\S+){0,8}/ix"; 
if(preg_match_all($pattern, $full_text, $matches)) 
{ 
    $result = str_replace(strtolower($search), "<span class='searched-for'>$search</span>", strtolower($matches[0][0])); 
} 
else 
{ 
    $result = false; 
} 

그리고 그것을 사용하려고했습니다 검색 구문이 영어 인 경우 작동하지만 다른 언어에서도 작동해야합니다. 예를 들어 히브리어 검색 구문에서는 작동하지 않습니다.

나는에 패턴을 변경 시도했다 :

$pattern = "(*UTF8)/(\w*\S\s+){0,8}\S*\b($preg_safe)\b\S*(\s\S+){0,8}/i"; 

그러나 그것은 작동하지 않았다.

다른 언어로 작동하게하려면 어떻게해야합니까?

////////////////// 편집 ////////// enrico.bacis으로

제안 - 내가 패턴을 변경했습니다 :

$pattern = "/(\w\p{Hebrew}*\S\s+){0,20}\S*\b($preg_safe)\b\S*(\s\S+){0,20}/ixu"; 

가 지금은 영어와 히브리어 검색 문구 작동하지만 (예를 들어 ') 특수 문자가있는 경우 그 결과의 텍스트가 절단되고있다.

특수 문자가 포함되어 있어도 패턴이 검색 구문 주위에 텍스트를 반환하도록하려면 어떻게해야합니까?

답변

1

\w은 히브리어 문자와 일치하지 않는 \w에 있습니다. 사실 \w[A-Za-z0-9_]이라는 소위 "단어"문자의 바로 가기입니다.

는 두 변경하게하기 만하면 히브리어 문자를 캡처하는 정규식 수 있도록하려면

  • UTF8 문자를 관리 할 수있는 수정에 u 추가를

  • (그래서 당신의 수정은 /ixu됩니다)

    패턴에 \w가 발생할 때마다 [\w\p{Hebrew}]을 바꿉니다.

또한이 항목에 대한 답변은 here을 확인할 수 있습니다.

+0

히브리어 및 영어로 작동해야하며 다른 언어도 있습니다. – Shani1351

+0

더 잘 설명 했으므로 지금 확인하십시오. –

+0

답장을 보내 주셔서 감사합니다.원래의 질문 – Shani1351

관련 문제