2013-03-02 6 views
0

У меня есть следующий пример файла:PHP preg_replace дубликат строки на нескольких строках

яблоко,
вишня,
(удалить)
груша,
(удалить)
виноград,
арбуз

Я использовал следующее выражение

preg_replace('/,+/', ',', $n); 

от this ответ.

Это прекрасно работает, но только если файл находится на одной линии:

apple, cherry,, pear,,... 

Как продлить выражение, чтобы удалить лишние дубликаты на нескольких строках, так что файл гласит:

яблока,
вишня, груша
,
виноград, арбуз

Вот код:

foreach ($lines as $line_num => $line) {
if ($line[0] === '.') { $compare_line = $line; $compare_line = preg_replace('/,+/', ',', $compare_line); echo $compare_line; } }

+0

если у вас есть только ограниченное количество дополнительных запятых (и вы 100% уверены), как только 2 или 3 дублей Вы можете использовать str_replace (массив (»,,,„“,,„),“ , ', $ n) быстрее. –

+0

Покажите нам свой код. – alfasin

+0

Это не будет больше, чем «,,» две запятые. Проблема заключается в удалении дополнительной запятой, которая стоит отдельно на новой строке. – thinkus

ответ

2

Моя догадка, что вы делаете что-то, чтобы разделить линии, а затем только применяя регулярных выражений к первой строке. Попробуйте просто сделать это:

file_put_contents("newfile.txt",preg_replace("/,+/", ",", file_get_contents("oldfile.txt"))); 
+0

Да, я использовал foreach ($ lines как $ line_num => $ line). Я попробую. Спасибо – thinkus

+0

Нет, это не делало то, что я искал, потому что я ищу конкретные строки и должен найти соответствующие, прежде чем добавлять их в новый файл. – thinkus

+0

+1 хороший ответ! если ОП хочет что-то более конкретное, он должен опубликовать свой код, ввод, ожидаемые результаты и фактические результаты. – alfasin

0

Вы можете сделать preg_replace обрабатывать все строки как одну строку, добавив флаг /s в конце выражения.

preg_replace('/,+/s', ',', $n); 
Смежные вопросы