2016-12-11 3 views
1

Я использую str_replace для удаления определенной строки, которая начинается с символа '#' из файла read txt, однако вывод html при тестировании удаляет только символ #. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу удалить весь текст, начинающийся с этого конкретного символа (включая «#» тоже).PHP Удаление нескольких целых строк из текстового файла

До сих пор я пытался:

1)

$data = str_replace('#','',file_get_contents($strFileName)); 
return $data; 

2)

fopen($strFileName,'r'); 
$remove = "#"; 
$tmpData = file_get_contents($strFileName); 
$data = preg_replace("/.*\b" . $remove ."\b.*\n/ui", "#" , $tmpData); 
return $data; 

оригинальный текстовый файл выглядит так:

# 

# bla bla bla 

# 

# bla bla bla 

# 

# bla bla bla 

Первая попытка удалила символ #, но оставила остальную часть слов. Второй не работает вообще. Спасибо.

ответ

1

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

$data = preg_replace("/^#.*/m", "", $tmpData); 
+0

Отлично, большое спасибо. Любой намек на то, как удалить строку, когда комментарий имеет отступ? Например, «#comment bla bla» имеет отступ, и указанное выше выражение не обнаруживает его. Спасибо – ASO

+0

Добавьте '\ s':' $ data = preg_replace ("/^\ s *? #. */M", "", $ tmpData); ' – Federkun

+0

Так оно и было. Благодаря :-) – ASO

1

Вы действительно должны использовать preg_replace для замены #. Но вам нужно «рассказать» регулярному выражению, что вы обрабатываете многострочный текст, поэтому он не останавливает замену после первой строки. Вы делаете это путем применения модификатора m в конце регулярного выражения, поэтому модель отправляется preg_replace будет:

/^#.*/m - отмечают m в конце выражения, что означает: многострочного поиска

Это будет соответствовать следующему: один символ # при запуске линии (так как ^ - это идентификатор начала линии) и всю строку после этого. С ниже Replacment:

$data = preg_replace('/^#.*/m','',$tmpData);

Заменит целые линии, которые были совпавшие выше ничего.

Here is a working example.