2011-02-15 5 views
0

이 작업을 수행하는 방법을 이해하는 데 어려움이 있습니다.정확한 단어를 preg_match하고 결과가 발견 된 전체 행을 인쇄하십시오.

나는 단어를 검색하려면 다음 나는 검색이 단어에서 발견 된 라인의 모든 내용과 함께 단어를 반환합니다.

단어는 대소 문자를 구분하므로 검색을 할 필요가 TOM은 결과와 함께 Tom을 반환하지 않습니다.

이것은 내가 지금까지 시도한 것입니다.

$contents = file_get_contents($file); 
$pattern = preg_quote($word, '/'); 
$numInt = 0; 
$pattern = "/^.*$pattern.*\$/m"; 
if(preg_match_all($pattern, $contents, $matches)) 
{ 
    $numInt = count($matches[0]); 
} 

내가이 함수를 실행하면 원하는 결과를 반환하지만 다른 키워드에서 일관성이없는 것으로 나타났습니다.

테스트 용 텍스트 파일에 INT (x18)이 있고 함수가 18을 반환합니다. 그러나 키워드 MORNING (x29)을 사용하면 morning이 사용 된 2 개의 인스턴스가 있기 때문에 기술적으로 올바른 31을 반환합니다.

+0

:

는 여기에 내가 채찍질 일부 코드입니다. –

+0

줄 번호가 필요하면 전화 한 번에 파일을 읽지 않아야한다고 생각합니다. 줄 바꿈을해야합니다 ... –

+0

키워드가 줄에 두 번 나타나면 한두 번으로 계산해야합니까? (현재는 한 번만 계산됩니다). – Jacob

답변

2

그럼이 작업을 위해 정규식을 함께 사용하지 않아도됩니다. 난 당신의 $ 탈출 백 슬래시를 제거하지 않으면 문제가 해결한다고 생각

<?php 
$contents = file_get_contents($file); 

#standardise those line endings 
$contents = str_replace(array("\r","\r\n","\n\r","\n"),"\n",$contents); 
$lines = explode("\n", $contents); 

#find your result 
$result = $line_num = array(); 
foreach($lines as $line_num => $l) 
    if(strpos($l, $word)) { 
    $result[] = $l; 
    $line_nums[] = $line_num; 
    } 

echo "<pre>"; 
print_r($result); 
echo "<br>Count:".count($result); 
+0

흠,이게 무슨 뜻인지 보도록하겠습니다. brb – Eli

+0

글쎄, 내 preg_match 접근 방식과 같은 결과를 줬지만, 여전히 대소 문자를 구분하는 문제가있다. – Eli

+0

strpos는 대소 문자를 구분한다. stripos는 대소 문자를 구별하지 않습니다. 당신이 원하는 것을 분명히 할 수 있습니까? 또한 strpos는 첫 번째 발생 만 계산합니다. 두 번 발생한다면 그 라인을 두 번 계산하기를 원한다는 말입니까? – Jason

관련 문제