基本上我正在寻找的是这个线程的PHP版本: Find, replace, and increment at each occurence of string
提前感谢您的帮助!
答案 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);
}
上述函数仅用于替换字符串出现一次,但您可以自由编辑该函数以执行其他所有可能的操作。