2011-11-07 19 views
7

Tôi muốn tìm một chuỗi văn bản cụ thể trong một hoặc nhiều tệp văn bản trong một thư mục, nhưng tôi không biết cách thực hiện. Tôi đã Googled khá lâu rồi và tôi không tìm thấy gì cả. Tôi hỏi các bạn cách tôi có thể sửa lỗi này?Tìm văn bản cụ thể trong nhiều tệp TXT trong PHP

Xin cảm ơn trước.

Trả lời

5

Bạn có thể nhận được những gì bạn cần mà không cần sử dụng grep. Grep là một công cụ hữu ích khi bạn đang ở trên dòng lệnh nhưng bạn có thể làm những gì bạn cần chỉ với một chút mã PHP.

này đoạn ít ví dụ, cung cấp cho bạn kết quả tương tự như grep:

$path_to_check = ''; 
$needle = 'match'; 

foreach(glob($path_to_check . '*.txt') as $filename) 
{ 
    foreach(file($filename) as $fli=>$fl) 
    { 
    if(strpos($fl, $needle)!==false) 
    { 
     echo $filename . ' on line ' . ($fli+1) . ': ' . $fl; 
    } 
    } 
} 
+0

Cảm ơn! Điều đó làm việc giống như một quyến rũ, nhưng làm thế nào tôi có thể nhận được một "mã" cụ thể trong một dòng? Một dòng giống như sau: 'TME: ... | UID: ... | FNE: ... | MSG: ... | IPA: ...'. "Mã" là ví dụ 'UID'. – Erik

+0

Nếu tôi hiểu chính xác bạn, 'if (strpos ($ line, '| UID:')! == false)' có thể làm những gì bạn cần. – ghbarratt

+0

Làm thế nào echo nên ở trong này nếu? – Erik

10

Nếu nó là một máy chủ Unix bạn đang chạy, bạn có thể thực hiện cuộc gọi hệ thống để grep trong thư mục:

$search_pattern = "text to find"; 
$output = array(); 
$result = exec("/path/to/grep -l " . escapeshellarg($search_pattern) . " /path/to/directory/*", $output); 

print_r($output); 
// Prints a list of filenames containing the pattern 
+0

Tôi đang sử dụng Windows :) Nhưng máy chủ web của tôi sử dụng Linux. Có thể làm điều này để làm việc trong Windows không, vì vậy tôi có thể kiểm tra nó trước khi tôi tải nó lên máy chủ web của tôi? – Erik

+1

Bạn có thể cài đặt grep cho Windows http://gnuwin32.sourceforge.net/packages/grep.htm (và các phụ thuộc của nó được liệt kê trên cùng một trang) –

1

Chỉ cần chỉ định tên tệp, nhận nội dung của tệp và so khớp regex với nội dung tệp. Xem thisthis để biết thêm chi tiết về mẫu mã của tôi dưới đây:

$fileName = '/path/to/file.txt'; 
    $fileContents = file_get_contents($fileName); 
    $searchStr = 'I want to find this exact string in the file contents'; 

    if ($fileContents) { // file was retrieved successfully 

     // do the regex matching 
     $matchCount = preg_match_all($searchStr, $fileContents, $matches); 

     if ($matchCount) { // there were matches 
      // $match[0] will contain the entire string that was matched 
      // $matches[1..n] will contain the match substrings  
     } 

    } else { // file retrieval had problems 

    } 

Lưu ý: Điều này sẽ làm việc không phân biệt hay không, bạn đang ở trên một hộp Linux.

Các vấn đề liên quan