2011-05-17 140 views
2

我需要找到文本specic線,從一個文本文件, 然後將其複製到一個新的文本文件:在PHP中從字符串的開頭刪除幾個字符?

1:我有幾行文字,例如文本文件:

JOHN 
MIKE 
BEN 
*BJAMES 
PETE 

2:因此,我讀到文本文件的內容到一個數組, 與每一行文本,置於該陣列的一個單獨的元件。

3:然後我測試的陣列, 的每個元素找到開頭的行,說:* B即:

if (preg_match("/^\*(B)/",$contents[$a])) 

其中一期工程確定...

4:然後我複製(寫)該文本行,到一個新的文本文件。

問:我在寫入新的文本文件之前,如何從該行文本中刪除'* B', ?

回答

2

如果你已經使用preg_match,你可以修改你的正則表達式來獲得你想要的另一個變量。

if (preg_match('/^\*B(.*)$/', $contens[$a], $matches) 
{ 
    fwrite($targetPointer, $matches[1]); 
} 

preg_match使用後可變$matches保持包圍在括號中的正則表達式的子部件中的單個匹配。因此,您的生產線的相關部分與(.*)匹配並保存到$matches[1]

0

有一試:

preg_replace('/^\*B/', '', $content[$a], -1, $count); 
if ($count) { 
    fwrite($file, $content[$a]); 
} 
2

的文件被讀這種方法寫的詩行,是更多的內存效率:

$sourceFile  = new SplFileObject('source.txt'); 
$destinationFile = new SplFileObject('destination.txt', 'w+'); 
foreach (new RegexIterator($sourceFile, '/^\*B.*/') as $filteredLine) { 
    $destinationFile->fwrite(
     substr_replace($filteredLine, '', 0, 2) 
    ); 
} 

demo

+0

還請參閱http:// gooh.posterous.com/iterating-files-with-spl – Gordon 2011-05-17 13:08:05

相關問題