[英]PHP change whole line if a word exist in a line of .txt file
我正在使用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文件
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>";
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.