2012-04-10 4 views
1

불행히도, 일부 이상한 이유로 regex 메서드가 UTF-8 (preg_replace + UTF-8 doesn't work on one server but works on another)으로 작동하지 않습니다.정규식없이 텍스트의 단어 집합을 검색하는 가장 효율적인 방법

정규식을 사용하지 않고 목표를 달성하는 가장 효율적인 방법은 무엇입니까?
하늘이 참 반환 파란색
스카이 림 false를 반환

고양이가 false를 반환 하늘,
고양이, 개 :

그냥 단어의 다음 세트, 가능한 한 명확하게하기

+0

사용중인 PHP 버전은 무엇입니까? –

답변

1

슈퍼 짧은 예제지만 Regex없이 그것을 할 방법입니다.

$haystack = "cats"; //"the sky is blue"; // "skyrim"; 
$needles = array("cat", "dog", "sky"); 

$found = false; 
foreach($needles as $needle) 
    if(strpos(" $haystack ", " $needle ") !== false) { 
     $found = true; 
     break; 
    } 


echo $found ? "A needle was found." : "A needle was not found."; 
+1

혹시라도 ['substr_count'] (http://php.net/manual/en/function.substr-count.php)를 부르길 원하십니까? ;-) – Basti

+1

Lior은'$ heystack'에'$ needle '이 포함되어있을 때만 interessted되므로'strpos'는이 솔루션에서 더 잘 수행 될 것이라고 생각합니다. http://stackoverflow.com/a/3875258/1220835 – Basti

+0

@Basti'strpos! == false'를 참조하십시오. – iambriansreed

1

필자의 초기 생각은 공백 문자를 폭발시킨 다음 단어가 결과 배열에 있는지 확인하는 것입니다. 당연히 고려해야 할 배열에 누 구두점이 누출 될 수 있습니다.

또 다른 아이디어는 단어의 strpos을 확인하는 것입니다. 발견 된 경우 다음 문자를 테스트하여 문자인지 확인하십시오. 편지 인 경우, 단어의 하위 텍스트를 찾았으며이 찾기를 버리는 것을 알고 있습니다.

// Test online at http://writecodeonline.com/php/ 

$aWords = array("I", "cat", "sky", "dog"); 
$aFound = array(); 
$sSentence = "I have a cat. I don't have cats. I like the sky, but not skyrim."; 

foreach ($aWords as $word) { 
    $pos = strpos($sSentence, $word); 
    // If found, the position will be greater than or equal to 0 
    if (!($pos >= 0)) continue; 
    $nextChar = substr($sSentence , ($pos + strlen($word)), 1); 
    // If found, ensure it is not a substring 
    if (ctype_alpha($nextChar)) continue; 
     $aFound[] = $word; 
} 

print_r($aFound); // Array ([0] => I [1] => cat [2] => sky) 

은 물론 더 나은 솔루션은 이러한 솔루션이 갑자기 근처 효율적으로 패턴을 추구는 것 같이 될 것입니다 당신이, 정규식을 사용할 수없는 이유를 확인하는 것입니다.

+0

사실, 매우 큰 텍스트를 다룰 때 가장 효율적인 방법입니까? – Lior

+3

@Lior 가장 효율적인 방법은 정규식을 얻는 방법을 찾는 것입니다. 이것은 그 어느 곳에서도 효율적이지 않습니다. – Sampson

+0

나는 내 인생에 대해 알아낼 수 없다. 솔직히 왜 작동하지 않는지 전혀 모른다. 그리고 더 이상 기다릴 수 없다. 불행히도 다른 솔루션을 사용해야한다. – Lior

0

당신은 단순히 단어는 문자열이 변수에 문자열을 저장할 수있는 경우 "에"를 사용 (문자열 내부 대신 문자열로 변수를 인쇄 할 인쇄 할 경우) 찾기 위해 노력하는 경우. 예 :

a = 'The sky is blue' 
The in a 
True 
+0

이것은 PHP 코드처럼 보이지 않습니다 ... – user13500

관련 문제