В PHP удалить несколько символов из начала строки? - PullRequest
2 голосов
/ 17 мая 2011

Мне нужно найти конкретную строку текста из текстового файла, а затем скопируйте его в новый текстовый файл:

1: у меня есть текстовый файл с несколькими строками текста, например:

JOHN
MIKE
BEN
*BJAMES
PETE

2: Итак, я читаю содержимое текстовых файлов в массив, с каждой строкой текста, помещенной в отдельный элемент массива.

3: Затем я проверил каждый элемент массива, чтобы найти строку, начинающуюся с, скажем: * B т.е.:

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

Что работает нормально ...

4: Затем я копирую (ЗАПИСИ) эту строку текста в новый текстовый файл.

Q: Так как же я могу удалить '* B' из этой строки текста, ДО того, как я напишу его в новый текстовый файл?

Ответы [ 4 ]

2 голосов
/ 17 мая 2011

Этот подход записывает строки при чтении файла, что более эффективно использует память:

$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

2 голосов
/ 17 мая 2011

Если вы уже используете preg_match, вы можете изменить свое регулярное выражение, чтобы получить то, что вы хотите в другой переменной.

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

После использования preg_match переменная $matches содержит одиночные совпадения частейрегулярного выражения, заключенного в скобки.Таким образом, соответствующая часть вашей строки соответствует (.*) и сохраняется в $matches[1].

0 голосов
/ 17 мая 2011

Попробуйте с:

preg_replace('/^\*B/', '', $content[$a], -1, $count);
if ($count) {
    fwrite($file, $content[$a]);
}
0 голосов
/ 17 мая 2011

С substr или preg_replace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...