Ну, просто используйте preg_replace:
$data = file_get_contents($filename);
$data = preg_replace('/^5678.*(\n|$)/m', '', $data);
Обратите внимание на модификатор m
. Это переводит PCRE в многострочный режим, где ^
соответствует началу документа и после любого символа новой строки (и $
соответствует концу документа и перед любым символом новой строки) ...
Кроме того, в зависимости от ваших точных потребностей вы можете создать потоковый фильтр :
class LineStartFilter extends php_user_filter {
protected $data = '';
protected $regex = '//';
public function filter($in, $out, &$consumed, $closing) {
var_dump($this->regex);
while ($bucket = stream_bucket_make_writeable($in)) {
$bucket->data = preg_replace($this->regex, '', $bucket->data);
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
public function onCreate() {
list($prefix, $data) = explode('.', $this->filtername);
$this->data = $data;
$this->regex = '/^'.preg_quote($data, '/').'.*(\n|$)/m';
}
}
stream_filter_register('linestartfilter.*', 'LineStartFilter');
Тогда просто сделайте это, когда хотите прочитать файл:
$f = fopen('test.txt', 'r');
stream_filter_append($f, 'linestartfilter.5678');
fpassthru($f);
fclose($f);
Это выведет вашу запрошенную строку. И если вы хотите записать в другой файл (скопируйте его):
$f = fopen('test.txt', 'r');
stream_filter_append($f, 'linestartfilter.5678');
$dest = fopen('destination.txt', 'w');
stream_copy_to_stream($f, $dest);
fclose($f);
fclose($dest);