2014-09-14 3 views
-1

에서 여러 단어를 검사하면 문자열에서 한 단어를 찾을 수 있지만 어떻게 많은 단어를 찾을 수 있습니까?PHP가 strpos를 사용하여 긴 한 단어 문자열

나는 문자열이 공백으로 구분 단어가있는 경우 그 방법을 알고하지만 난 array('hi','how','are','you')와 문자열이있는 경우, 예를 들어, $string = 'hihowareyoudoingtoday?' 어떻게 일치 할 총 금액을 반환 할 수 있습니다?

+1

루프 및 카운터 사용 – exussum

+0

http://php.net/manual/en/function.strpos.php 또는 http://php.net/manual/en/function.stripos.php –

+0

@exussum 나는 생각했다. 어떤 식 으로든 속도 성능에 영향을 미칠 수 있습니까? – OGcode

답변

2

당신은 일치의 수를 반환 preg_match_all를 사용할 수 있습니다

$words = array('hi','how','are','you'); 

$nb = preg_match_all('~' . implode('|', $words) . '~', $string, $m); 

print_r($m[0]); 

echo "\n$nb"; 

preg_match_all 함수입니다 문자열의 모든 패턴을 검색합니다. 본 실시 예에서, 패턴은 다음

~hi|how|are|you~ 

~은 패턴 구분자이다.

| 논리 OR

참고 인 검색이 수행되는 형태는 문자열에 문자로 바로 문자 왼쪽 각각의 대안이 하나와 일치 할 때까지 시험한다. 따라서 한 위치에서 일치하는 첫 단어는 일치 결과 ($m)로 저장됩니다. 이 메커니즘을 이해하는 것이 중요합니다. 예를 들어, 문자열이 baobab이고 패턴이 ~bao|baobab~ 인 경우 결과는 bao 일 뿐이며 테스트 된 첫 번째 대안이기 때문입니다.

즉, 가장 큰 단어를 먼저 얻으려면 이전에 크기별로 정렬해야합니다.

+0

긴 문자열을 어디에서 나눌 지 어떻게 알 수 있습니까? 나는 당신이 설명 할 마음이 없다면 그것을 얻지 못한다. – OGcode

+0

@ user3673223 : 그것은 모른다! 문자 단위로 문자를 처리하고 각 부분 문자열을 테스트합니다. 하위 문자열이 일치하면 다음 문자로 진행하고 문자열 끝까지 계속됩니다. –

+0

그게 효과가! 고맙습니다. – OGcode

1

예,이 경우 strpos()를 사용할 수 있습니다

예 :

$haystack = 'hihowareyoudoingtoday?'; 
$needles = array('hi','how','are','you'); 
$matches = 0; 
foreach($needles as $needle) { // create a loop, foreach string 
    if(strpos($haystack, $needle) !== false) { // use stripos and compare it in the parent string 
     $matches++; // if it matches then increment. 
    } 
} 

echo $matches; // 4 
+0

그런 식으로 한 번에 한 단어를 검사하는 것과 비교를 통해 어떤 방식으로 속도 성능을 반복할까요? – OGcode

+0

@ user3673223 몇 개의 문자열을 비교할 예정입니까? 문자열은 최대 2GB까지 가능합니다. 귀하의 프로젝트가 그 목표에 도달 할 것입니까? 이걸 사용하는 것이 좋습니다. – Ghost

관련 문제