Удалить следующую пустую строку из текста - PullRequest
0 голосов
/ 09 февраля 2012

Из текста:

Text...
Target row


Text...

Мне нужно удалить строку со строкой ' Целевая строка ' и следующая пустая строка . Поэтому мне нужно получить:

Text...

Text...

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012
$result = preg_replace('/^Target row\r?\n\r?\n/m', '', $subject);

, если пустые строки не должны содержать ничего, даже пробелов / табуляций.Если пробелы / табуляции разрешены, используйте

$result = preg_replace('/^Target row[ \t]*\r?\n[ \t]*\r?\n/m', '', $subject);
0 голосов
/ 09 февраля 2012

У вас есть несколько «больших опций».

Замена символов в тексте:

$req = ''; // Partial string to get matched
$length = 0; // If you had a full string not partial, use strlen here

// Now find beginning, don't forget to check with === false
$pos = strpos( $text, $req);
$end = strpos( $text, "\n", $pos+1);

// If you don't have criteria that match from start
$start = strrpos( $text, "\n", $pos-1);
// And build resulting string (indexes +/-2, do your job):
$result = substr( $text, 0, $start-1) . substr( $text, $end+2);

Совпадение результатов с preg_match_all()

Если вам нужно сопоставить более сложный шаблон, вы можете использовать preg_match_all() с флагом PREG_OFFSET_CAPTURE (чтобы получить начальное смещение) и использовать тот же алгоритм, что и в предыдущем примере (предыдущий должен быть намного эффективнее).

Используйте preg_replace

Как предложил Тим Пицкер, но это решение не заботится о пробелах в свободном ряду

$result = preg_replace('/^Target row\r?\n\s*\r?\n/m', '', $subject);

Использованиеexplode и next

$array = explode( "\n", $text);
// I would use this only when loading file with:
$array = file( 'file.txt');

while( $row = next( $array)){
  if( matches( $row)){ // Apply whatever condition you need
    $key1 = key( $array);
    next( $array); // Make sure it's not === false
    $key2 = key( $array);

    unset( $array[$key1]);
    unset( $array[$key2]);
    break;
  }
}

При загрузке из файла с fgets

$fp = fopen( 'file.txt', 'r') or die( 'Cannot open');
while( $row = fgets( $fp)){
  if( matched( $row)){
    fgets( $fp);// Just skip line
  } else {
    // Store row
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...