2011-06-13 51 views
3

我試圖做一個小的PHP腳本來自動化一些工作過程。 腳本必須做的是讀取一個文件(每個文件大約10-20kb)。 然後,我需要在文件中搜索一些特定的短語並輸出 - 如果短語出現 - 布料號和短語。PHP:在特定的短語/單詞和輸出後的文本文件中搜索

例如,我有一個我正在閱讀和搜索的文本文件。我搜索短語「花是黃色的」,「馬是白的」,和「混合」;

然後我的輸出是:

4號線:「馬是白的」 第19行: 「混合」; 第22行:「混合」; 第99行:「花是黃色的」 ...等等。

我使用這個代碼,它正確地輸出每一行和行號,但我不能讓一個搜索程序,僅輸出搜索短語:

<?php 
$lines = file('my-text-file.txt'); 

foreach ($lines as $line_num => $line) { 
    echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n"; 
} 
?> 

我雖然是使用strpos,然後每當我找到一個短語的出現,它把它放到一個數組(或字典)中,行號作爲鍵和短語作爲值,但沒有能夠使它的工作,我認爲有可能做一個更好,更有效的方法。

任何幫助或建議,我已經去的方向將非常感激。

感謝
- Mestika

回答

2
function search ($what = array(), $filePath) { 
    $lines = file ($filePath); 

    foreach ($lines as $num => $line) { 
     foreach ($what as $needle) { 
      $pos = strripos ($line, $needle); 
      if ($pos !== false) { 
       echo "Line #<b>{$num}</b> : " . htmlspecialchars($line) . "<br />\n"; 
      } 
     } 
    } 
} 

# Usage: 
$what = array ('The horse is white', 'The flower is yellow', 'mixed'); 
search ($what); 
+0

喜羅密歐,那工作不錯 - 它回到它應該,但有一個例外的線條。最後一個詞「混合」,它搜索「混合」,不管它在哪裏。 例如如果有一行:「混合顏色」,那麼它也會返回它。無論如何要「修剪」它只返回整個單詞,或者如果有符號,如「。」要麼 」;」在它後面?所以「混合」將被退回,但不是「混合顏色」? – Mestika 2011-06-15 12:50:55

+0

恐怕你需要正則表達式。這正是我想要首先發布的內容,但是人們會開始抱怨它很慢,但它是最強大和最複雜的文本匹配方式。您可以使用'preg_match('/ \ b'。preg_quote($ needle,'/')。'\ b/i',$ line)'來代替stripos。這裏是一個正則表達式的單詞邊界的讀取,還有更多關於正則表達式的內容:http://www.regular-expressions.info/wordboundaries.html – 2011-06-15 17:42:09

1

創建一個腳本,將用grep你的輸入和管道的結果到您的PHP腳本。

相關問題