PHP меняет целую строку, если слово существует в строке .txt-файла

Я использую preg_replace для поиска совпадения слов в строке текстового файла. Если он найден, я бы хотел заменить всю строку. Моя текущая проблема – то, что я пробовал до сих пор, только заменяет точное слово, а не всю строку.

PHP

  $database = "1.txt"; $id = "OFFENSIVEWORD1"; $str = file_get_contents($database); $str = preg_replace("/\b".$id."\b/","********",$str); $fp = fopen($database,'w'); fwrite($fp,$str); fclose($fp); 

1.TXT FILE

 LOVING YOU MY FRIEND etc. OFFENSIVEWORD1 YOU MY FRIEND etc. OFFENSIVEWORD2 YOU MY FRIEND etc. OFFENSIVEWORD3 YOU MY FRIEND etc. 

ОЖИДАЕМЫЙ ВЫХОД

 LOVING YOU MY FRIEND etc. ******** OFFENSIVEWORD2 YOU MY FRIEND etc. OFFENSIVEWORD3 YOU MY FRIEND etc. 

Благодарю.

вам нужно изменить

 $str = preg_replace("/\b".$id."\b/","********",$str); 

в

 $str = preg_replace("/\b" . $id . "\b.*\n/ui", "********\n", $str); 

чтобы он работал. Обратите внимание на разницу между новой линией между различными операционными системами.

Обновить

или лучше использовать

 $str = preg_replace("/.*\b" . $id . "\b.*\n/ui", "********\n", $str); 

в случае, если ваше оскорбительное слово не находится в начале строки.

Это также должно сделать это (это проверено и работает):

 <?PHP $str = " hello this is PROFANE 1 clean statement"; $lines = explode(' ', $str); $newfile = ''; foreach($lines as $line) { // ** change PROFANE 1 and PROFANE 2 obviously to real profane words to filter out if (stripos($line, 'PROFANE 1') !== false || stripos($line, 'PROFANE 2') !== false) { $line = preg_replace("/./", "*", $line); } $newfile .= ' ' . $line; } echo "<pre>" . $newfile . "</pre>"; ?>