【问题标题】:replacing occurences of a word with another on the first line of a text in PHP在PHP中文本的第一行用另一个单词替换出现的单词
【发布时间】:2013-06-04 13:14:53
【问题描述】:

假设我有一个文本:

这一行是该文本的第一行,称为 %title%

这一行是第二行

第三行,%title% 不应该被替换

...

最后一行

现在我想使用 PHP,所以文本变成:

这一行是该文本的第一行,名为 MY_TITLE

这一行是第二行

第三行,%title% 不应该被替换

...

最后一行

还要注意第三行的 %title%

最好(最快)的方法是什么?

【问题讨论】:

  • @Baba 再次阅读正文
  • @Oddant 我读得很完美.... str_replace 会工作
  • @Puciek 不要吹牛,提出一个体面的答案
  • @Puciek 我可以努力,我可以使用 substr 和 replace 然后将字符串放在一起,但正如括号所暗示的那样,我想检查是否存在更优化的解决方案,现在请帮忙​​,停止上课。

标签: php replace


【解决方案1】:

有两种方法:

  • 如果您确定替换必须只执行一次(即占位符始终位于第一行,并且始终只有一个 c),您可以使用 $result=str_replace('%title%','MY_TITLE',$input,1)

  • 如果不能保证,需要将第一行分开:

.

$pos=strpos($input,"\n");
if (!$pos) $result=$input;
else $result=str_replace('%title%','MY_TITLE',substr($input,0,$pos)).substr($input,$pos);

【讨论】:

  • 我喜欢这个解决方案,如果程序涉及使用大文件,您认为 substr 是否会损害性能?
  • 每个 PHP 中的此类字符串操作都涉及复制字符串,如果字符串很大,则涉及内存和 CPU 问题。我提出的解决方案是那些,恕我直言,涉及其中的最少。如果您从文件中读取字符串,请更新您的答案,这可能会容易得多(想想fopen(); fgets(); str_replace(); fread(); fclose()
  • 实际上 str_replace 中的最后一个数字只是一个计数器,设置为字符串中执行的替换次数..
  • @Oddant:没错。所以 IF 你确定,你在第一行中恰好有一次占位符,THEN 处理第一行等于处理第一次出现。
  • 不,我的意思是最后一个参数是对变量的引用,一旦函数完成,变量包含通过所有文本执行的替换次数。它不能工作。
【解决方案2】:

您只能将第一行加载到变量中,而不是 str_ireplace 然后将第一行 + 文件的其余部分放回一起。

$data = explode("\n", $string);
$data[0] = str_ireplace("%title%", "TITLE", $data[0]);    
$string = implode("\n", $data);

恕我直言,这不是最有效的方式,但适合且快速编码。

【讨论】:

  • 感谢这个解决方案,但是如果文件真的很大,我想这种爆炸和内爆会消耗大量内存+处理使用
  • @Whistletoe 不,它没有,我将分解文件的所有行以在 $data 中返回一个数组
【解决方案3】:

您可以使用preg_replace() 这只是一行代码;)

$str = "this line is the first line of this text called %title%\n
this line is the second one\n
the third line, %title% shouldn't be replaced\n
last line";

echo preg_replace('/%title%$/m','MY_TITLE',$str);

正则表达式解释:

  • /%title% 表示 %title%
  • $ 表示行尾
  • m 使输入的开头 (^) 和输入的结尾 ($) 代码也分别捕获行的开头和结尾

输出:

this line is the first line of this text called MY_TITLE
this line is the second one the third line, %title% shouldn't be replaced
last line

【讨论】:

  • 对不起,我应该注意到 %title% 可以在第一行的任何位置
  • 您只想从第一行删除它?那么,为什么不使用 $str = str_replace( "%title%", "MY_TITLE", $str, 1 ); 删除仅 1 次出现
猜你喜欢
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多