2013-03-21 4 views
0

내가 사용하는 스트립 핑 기능 중 하나가 단어를 무작위로 건너 뛰는 것 같습니다.Wordstrip 함수는 명백한 이유없이 단어를 건너 뜁니다.

<?php 
function wordstrip($document){ 
    //I truncated the list here for brevity 
$wordlist = array(
"it39s", 
"039", 
"the", 
"while", 
"message"); 

//convert all uppercase to lower so matches work correctly 
$document = strtolower($document); 
      foreach($wordlist as $word) 

      $document = preg_replace("/\s". $word ."\s/", " ", $document); 
      //echo $word; 
      //echo $document; 
      $nopunc = preg_replace('/[^a-z0-9]+/i', ' ', $document); 
      $trimmed = trim($nopunc); 
      return $trimmed; 
    } 

?>

그것은 단어 "는"내가 왜 아무 단서를 건너 뛰는 것. 이 목록은 200 단어 정도의 길이이며 다른 단어를 떼어 내고 있기 때문에 작동하는 것을 알고 있습니다.

나는 "죽는 베테랑에서 조지 W 부시와 딕 체니에게 보내는 마지막 편지"를 받았습니다. 뒤로 "마지막 편지는 죽어가는 노병에게서 조지 부시와 거시기 cheney에"012 "를"/ \ s "로 인해 생각하는 문자열의 시작 부분에있는 것 같아요. 나는 "/ \ s"을 시도했다. 그러나 그 didnt는 일한다. 나는 공간을 선택적으로 만들 필요가 있다고 생각하니?

감사합니다

+0

http://codepad.org/rhBk6PmH –

답변

2

당신은 단어를 둘러싸고 수있는 공간 또는 기간 또는 어떤 다른 바이올린 단어 경계를 표현하기 위해 \b를 사용하지 못했습니다 :

$document = strtolower($document); 

foreach($wordlist as $word) 
    $document = preg_replace("/\b". $word ."\b/", " ", $document); 

$nopunc = preg_replace('/[^a-z0-9]+/i', ' ', $document); 
$trimmed = trim($nopunc); 
return $trimmed; 
+0

왜'/ i '대신에'strtolower()'를 쓰겠습니까? –

+0

@ JaredFarrish - 내 코드가 아닙니다 ... 단지 물어 본 것을 사용합니다. – Daedalus

+0

아 - 원본에서 알 수 없습니다. 그것이 TheEditor에서 지시 된 것을 고려하십시오. –

관련 문제