我需要从文本文件中找到一个特定的文本行, 然后将其复制到新的文本文件:
1:我有一个包含多行文字的文本文件,例如:
JOHN
MIKE
BEN
*BJAMES
PETE
2:所以,我把文本文件内容读成数组, 每行文本,放入数组的单独元素。
3:然后我测试了数组的每个元素, 找到以...开头的行,比如:* B ie:
if ( preg_match( "/^\*(B)/",$contents[$a] ) )
哪个有效...
4:然后我将那行文本复制(写入)到一个新的文本文件。
问:那么如何从该文本行中删除'* B', 在我把它写到新的文本文件之前?
答案 0 :(得分:2)
如果您已使用preg_match
,则可以修改正则表达式,以便在其他变量中获得所需内容。
if (preg_match('/^\*B(.*)$/', $contens[$a], $matches)
{
fwrite($targetPointer, $matches[1]);
}
使用preg_match
后,变量$matches
保存括号中括起来的正则表达式子部分的单个匹配项。因此,您的行的相关部分与(.*)
匹配并保存到$matches[1]
。
答案 1 :(得分: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)
);
}
答案 2 :(得分:0)
答案 3 :(得分:0)
尝试使用:
preg_replace('/^\*B/', '', $content[$a], -1, $count);
if ($count) {
fwrite($file, $content[$a]);
}