我有一个文本文件,如下所示:
yyy.txt:
line1
line2
line3line4
line5line3
line3
现在我想在下面的代码中用555
替换line3
。但我只想在line3
不是另一个单词的一部分的情况下替换这行,例如XYline3
或line3XY
。
我试图用这个代码来实现这一点:
$filename="yyy.txt";
$line="line3";
file_put_contents($filename, str_replace($line , "555", file_get_contents($filename)));
输出:
第1行第2行555第4行第5行555555
正如你在这里看到的,它也取代了line3line4
和line5line3
,尽管我不想要这个。
那么,我如何更改我的当前代码,使其仅在搜索词不属于另一个单词的情况下替换它呢?我有点被困在这里,不确定str_replace()
是否可能,或者我是否必须用另一种方式来做。
使用preg_replace:
$line="/'bline3'b/";
file_put_contents($filename, preg_replace($line , "555", file_get_contents($filename)));
这将替换句子中与line3
匹配的所有单词。
要精确匹配,请使用:/^line3$/m
像^line3$
这样带有m
修饰符的正则表达式只能查找line3
行。CCD_ 14使CCD_。
https://regex101.com/r/xT7bS3/1
PHP用法:
<?php
$string = 'line1
line2
line3line4
line5line3
line3';
echo preg_replace('/^line3$/m', '555', $string);
PHP演示:https://eval.in/494548
file_put_contents($filename, preg_replace(
"/^line3's*$/gm" ,
"555",
file_get_contents($filename)
));
在正则表达式中,^
匹配一行的开头,line3
匹配第3行,'s*
匹配零个或多个空格/制表符,$
匹配该行的末尾。开关gm
意味着处理所有匹配,并将字符串视为多行。
首先,你的数据应该更干净,你的问题应该更有条理,无论如何,
- 打开您的文本文件,并确保在在每行的末尾,单击每行的末尾
使用以下脚本:
$filename="yyy.txt"; $content = file_get_contents($filename); $content = preg_replace ('/('r)+line3('r)+/', "'r555'r" , $content); $content = preg_replace ('/('n)+line3('n)+/', "'n555'n" , $content); file_put_contents($filename, preg_replace ('/('s)+line3('s)+/', "'s555's" , $content));