PHP preg_replace также удаляет разрывы строк

Хорошо, чтение файла с использованием file_get_contents и удаление <?php, <? и/или любых тегов ?>, но я также хочу удалить все разрывы строк в файле. Как я могу этого добиться?

Например такой файл:

<?php

$txt['dpmod_testing'] = 'Testing';
$txt['dpmodtitle_testing'] = 'My Testing Module';
$txt['dpmodinfo_testing'] = 'Just a Testing Module, nothing special.';
$txt['dpmoddesc_testing'] = 'Here is a description for this testing module that you will see within the Add Modules section![color=red]I can give myself credit for this module if I want to![/color][hr]And this text string also accepts BBC Code!';

?>

Должно вернуть это:

$txt['dpmod_testing'] = 'Testing';
$txt['dpmodtitle_testing'] = 'My Testing Module';
$txt['dpmodinfo_testing'] = 'Just a Testing Module, nothing special.';
$txt['dpmoddesc_testing'] = 'Here is a description for this testing module that you will see within the Add Modules section![color=red]I can give myself credit for this module if I want to![/color][hr]And this text string also accepts BBC Code!';

Но вместо этого я записываю это в файл при использовании file_put_contents:

$txt['dpmod_testing'] = 'Testing';

$txt['dpmodtitle_testing'] = 'My Testing Module';

$txt['dpmodinfo_testing'] = 'Just a Testing Module, nothing special.';

$txt['dpmoddesc_testing'] = 'Here is a description for this testing module that you will see within the Add Modules section![color=red]I can give myself credit for this module if I want to![/color][hr]And this text string also accepts BBC Code!';

С 2 разрывами строк сверху и 2 разрывами строк также снизу. Как я могу удалить все эти разрывы строк?

Вот preg_replace, который я использую для удаления тегов php из файла, но как это можно изменить, чтобы сохранить файл таким, какой он есть, и удалить все разрывы строк?

preg_replace(array('/<\?php/s', '/\?>/s', '/<\?/s'), array('', '', ''), $str);

Спасибо, парни :)


person SoLoGHoST    schedule 08.09.2011    source источник
comment
Как именно вы получаете $str?   -  person powtac    schedule 08.09.2011
comment
используя file_get_contents для получения $str из файла.   -  person SoLoGHoST    schedule 08.09.2011
comment
Я проверяю и вижу, что с вашей функцией preg_replace все в порядке, может быть, где-то еще   -  person Bang Dao    schedule 08.09.2011


Ответы (3)


как написано в

Удаление избыточных разрывов строк с помощью регулярных выражений

возможно, вы могли бы добавить '(?:(?:\r\n|\r|\n)\s*){2}/s' и '' в свои массивы... но я не проверял

просто убедитесь, что ich соответствует новой строке только дважды

person definitely undefinable    schedule 08.09.2011
comment
ОМГ, это ПОЧТИ то, что мне нужно. за исключением того, что он вернул это: $txt['dpmod_testing'] = 'Russian Testing';$txt['dpmodtitle_testing'] = 'My Russian Testing Module';$txt['dpmodinfo_testing'] = 'Just a Russian Testing Module, nothing special.';$txt['dpmoddesc_testing'] = 'Here is a Russian description for this testing module that you will see within the Add Modules section![color=red]I can give myself credit for this module if I want to![/color][hr]And this text string also accepts BBC Code!'; ALL теперь только в 1 строке. - person SoLoGHoST; 08.09.2011
comment
Если вместо этого я заменю {2} на {3}, я все равно получу дополнительные строки в коде, который разделяет каждую переменную $txt, но строки выше и ниже исчезнут... Закрыть, но нет сигары! - person SoLoGHoST; 08.09.2011
comment
Неважно, это прекрасно работает, потому что он избавляется от ВСЕХ разрывов строк, поэтому, если вы хотите, вы должны заменить его на \n, ПРИВЕТСТВИЯ БРО, и спасибо за поиск этой темы, на самом деле я сам искал ее, но был не нашел ничего, что могло бы помочь. Спасибо :) - person SoLoGHoST; 08.09.2011

Это кажется самым простым решением; отлично работает для меня с PHP:

http://php.net/manual/en/function.preg-replace.php#85883

В основном вы добавляете "(*ANYCRLF)" в начало шаблона выбора регулярного выражения. Поддерживается, начиная с версии PCRE 7.3.


Более подробное объяснение здесь:

http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions

(раздел "Параметры новой строки/разрыва строки")

person a20    schedule 27.03.2012

Лучше бы:

$content = file_get_contents('file.php');
$content = trim($content);
$content = ltrim($content, '<?php');
$content = ltrim($content, '<?');
$content = rtrim($content, '?>');
$content = trim($content);
file_put_contents('file.php', $content);
person powtac    schedule 08.09.2011
comment
Это по-прежнему ставит разрывы строк между каждой строкой в ​​файле и по-прежнему добавляет 2 строки выше и 2 строки ниже строк файла при использовании file_put_contents для помещения его в другой файл. - person SoLoGHoST; 08.09.2011
comment
Кроме того, я считаю, что у вас есть ошибка в вашем коде. $file нигде не определен, но вы его используете. - person SoLoGHoST; 08.09.2011
comment
@SoLo, добавил обрезку перед использованием put, теперь две строки до и после должны исчезнуть. Также исправлено использование put! Если между строками есть двойные разрывы строк, значит, у вас проблема с исходным файлом. Тогда я предполагаю, что есть какая-то проводная проблема \n\r Linux-Mac-Windows! - person powtac; 08.09.2011
comment
Хорошо, конечно, братан, но твой метод мне не помог. определенно неопределенный ответил на вопрос! Спасибо в любом случае за вашу помощь! - person SoLoGHoST; 08.09.2011