2013-03-19 3 views
0

콘텐츠 설명이 있고 나열된 단어 ("Google"및 "Gmail")가 거의 없습니다. 이제 이러한 단어가 콘텐츠 설명에 표시되면 해당 링크로 바꿔야합니다. 정규 표현식을 작성하고 preg_match를 사용하여 성공적으로 대체했습니다. 하지만 지금은 그것들을 제한하고 싶습니다. 예 : 2 개의 발견 된 단어가 매우 가까운 경우 대체되지 않습니다. 내 설명은 다음과 같다 :일치하는 항목이 PHP에서 preg_replace에 매우 가까이에있는 경우 제한 문자열 교체

이제 내 요구 사항입니다. "이는 구글의 Gmail에 대한 내 설명은 내가 또한 링크 및 Gmail과 구글을 교체해야"첫째, Gmail을 교체하지 않아야 첫번째 때문에 "Google"은 매우 가까이에 있으며 (1 단어 거리 만) 나머지 단어는 매우 멀리 있기 때문에 바꿔야합니다. 따라서 내 결과는 다음과 같아야합니다 :

This is my description for <a href="google.com">Google</a> and Gmail. I need to replace <a href="google.com">Google</a> with its link and also <a href="gmail.com">Gmail</a>. 

나는 룩어 헤드 매칭을 사용했지만 작동하지 않습니다.

+0

이 어떻게 "아주 가까운"계량 않고 "아주 멀리"나는 다음나요? 솔루션을 결정하기 위해 이들을 정확하게 정의해야합니다. – nickb

+0

먼저 모든 Gmail을 교체 한 다음 Gmail을 모두 교체하십시오.) – raina77ow

+0

@nickb 사실, OP는 '1 단어 거리 만'이라고 정의했습니다. 예를 들어 Google은 'Google 및 Gmail'구문에서 Gmail과 너무 가깝습니다. – raina77ow

답변

0

나는 해결책을 얻었다.

각 단어마다 하나씩 preg_match_all을 사용하고 오프셋 (PREG_OFFSET_CAPTURE)이있는 일치하는 단어의 배열을 유지 관리했습니다.

이제 모든 일치 단어 목록을 위치와 함께 관리하여 단어 무게에 따라 그 목록을 정렬했습니다. 이제 모든 알고리즘을 사용하여 텍스트에서 가장 가까운 대체 항목을 추적 할 수 있습니다.

1: Replace first list word in body and maintain a temp tracking array with position of this word. 
2: For second word in list, first check the temp tracking array and find nearest position of second word. Now you can find words between first word and second word using str_word_count function. 
3: Now do this for all words in list.