2017-01-02 4 views
0

В разных текстовых файлах (или внутри одного текстового файла) у меня есть разные комбинации конца строки (см. Пример ниже).Заменить любую комбинацию (CR) и (LF) одним (CRLF) в текстовом файле, используя php

Как унифицировать все комбинации CR и LF с помощью одного простого CRLF? В нескольких словах мне нужно заменить все комбинации CR и LF одним CRLF, используя PHP. С str_replace я могу их заменить, но моя проблема - правильная строка поиска для использования.

$textfile=str_replace("search string i need","CRLF to replace", $textfile); 

Пример универсального текстового файла исправить:

text line 1 CRLFLFCRCRLF 
text line 2 LFLFCRLFCRCR 
text line 3 CRLF 
text line 4 CR 
text line 5 LF 

Мне нужно заменить все \ г \ п случайных комбинаций только с \ г \ п, как это:

text line 1 CRLF 
text line 2 CRLF 
text line 3 CRLF 
text line 4 CRLF 
text line 5 CRLF 
+1

Добро пожаловать в SO! Пожалуйста, прочитайте [это руководство] (http://stackoverflow.com/help/how-to-ask) о том, как должен быть сформулирован вопрос о том, как увеличить ваши шансы получить ответ, который вы можете использовать. Как сейчас, слишком много разных хороших ответов, поскольку вопрос слишком широк. Вы могли бы сузить его, включив то, что вы пробовали сами. – Demitrian

+1

Возможный дубликат [Как заменить различные стили новой строки на PHP самым умным способом?] (Http://stackoverflow.com/questions/7836632/how-to-replace-different-newline-styles-in-php-the-smartest -way) –

+0

Я изменил вопрос. Теперь лучше? Извините, это мой первый вопрос, следующий будет лучше. Спасибо, что поняли меня. –

ответ

1

Вам не нужно регулярное выражение для этого:

str_replace(["\r\n", "\r", "\n"], "\r\n", $str); 

Это заменит каждую строку в массиве (и сохраните порядок, поэтому, если у вас есть \r\n, он не будет заменен на \r\n\r\n).

+0

Ошибка анализа: синтаксическая ошибка, неожиданная '[', expecting ')' –

+0

Какую версию PHP вы используете? (для старых версий используйте 'Array (" \ r \ n "," \ r "," \ n ")' вместо '[" \ r \ n "," \ r "," \ n "]') – Dekel

+0

Теперь ошибка исправлена, но CRLF умножаются вместо фиксированного. Вот код, в котором я использую вашу предложенную строку: $ str1 = file_get_contents ($ _ FILES ['uploaded'] ['tmp_name']); $ str2 = str_replace (Array ("\ r \ n", "\ r", "\ n"), "\ r \ n", $ str1); file_put_contents ($ _ FILES ['uploaded'] ['tmp_name'], $ str1); Где я могу ошибиться? –

1

PCRE имеет псевдоним для любой комбинации новой строки: \R

Вы можете сделать это:

$text = preg_replace('~\R~', "\r\n", $text); 

По умолчанию \R матчей CR, LF или CRLF, но если вы хотите, чтобы расширить значение из \R к любым Юникода перевода строки последовательностей, используют и- модификатор:

$text = preg_replace('~\R~u', "\r\n", $text); 
+0

Добавьте квант '+', чтобы заменить несколько строк в одном. – Toto

1

Для того, чтобы заменить все комбинации «\ г \ П»с '\ г \ п' Использование:

$result = preg_replace('/[\r\n]+/', "\r\n", $text); 

Это будет также заменить сингл '\ R' или '\ П' с '\ г \ п'.