2011-05-17 116 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

相关问题