找到一个特定的字符串并用增量替换它 - PHP

时间:2012-02-14 07:14:53

标签: php increment str-replace

基本上我正在寻找的是这个线程的PHP版本: Find, replace, and increment at each occurence of string

提前感谢您的帮助!

6 个答案:

答案 0 :(得分:2)

$str = 'a hello a some a';
$i = 0;

while (strpos($str, 'a') !== false)
{
    $str = preg_replace('/a/', $i++, $str, 1);
}

echo $str;

答案 1 :(得分:1)

preg_replace(array_fill(0, 5, '/'.$findme.'/'), range(1, 5), $string, 1);

示例:

preg_replace(array_fill(0, 5, '/\?/'), range(1, 5), 'a b ? c ? d ? e f g ? h ?', 1);

输出

a b 1 c 2 d 3 e f g 4 h 5

答案 2 :(得分:0)

如果我理解你的问题......

<?php
//data resides in data.txt
$file = file('data.txt');
//new data will be pushed into here.
$new = array();
//fill up the array
foreach($file as $fK =>$fV) $new[] = (substr($fV, 0, 1)==">")? str_replace("num", $fK/2, $fV) : $fV;
//optionally print it out in the browser.
echo "<pre>";
print_r($new);
echo "</pre>";
//optionally write to file...
$output = fopen("output.txt", 'w');
foreach($new as $n) fwrite($output, $n);
fclose($output);

答案 3 :(得分:0)

我更喜欢使用 preg_replace_callback() 来完成这项任务。与每次从字符串开头重新开始的迭代单个 preg_replace() 调用相比,这是一种更直接的解决方案(检查已被替换的文本)。

  • ^ 表示一行的开始,因为 m 模式修饰符。
  • \K 表示重新开始完整的字符串匹配。这有效地防止了文字 > 被替换,因此只替换文字字符串 num
  • static 计数器声明只会在第一次访问时将 $counter 设置为 0
  • 自定义函数不需要接收匹配的子字符串,因为要替换整个完整的字符串匹配。

代码:(Demo)

$text = <<<TEXT
>num, blah, blah, blah

ATCGACTGAATCGA

>num, blah, blah, blah

ATCGATCGATCGATCG

>num, blah, blah, blah

ATCGATCGATCGATCG
TEXT;

echo preg_replace_callback(
         "~^>\Knum~m",
         function () {
             static $counter = 0;
             return ++$counter;
         },
         $text
     );

答案 4 :(得分:-1)

嘿,你可以使用preg_replace完成相同的工作:

$num = 1;
while(strpos($str, $findme) !== ) {
 preg_replace("/$findme/", $num++, $str, 1);
}
只要它可以找到你的String并用$ num增量替换它,它的作用就是循环。迎接

答案 5 :(得分:-1)

这是我的两分钱

function str_replace_once($correct, $wrong, $haystack) {
    $wrong_string = '/' . $wrong . '/';
    return preg_replace($wrong_string, $correct, $haystack, 1);
}

上述函数仅用于替换字符串出现一次,但您可以自由编辑该函数以执行其他所有可能的操作。