Вот три варианта.
Сначала разделение.Да, я знаю, вы хотите сделать это без разделения.
$string = 'bbbbabbbbbccccc';
$parts = preg_split('/(a)/', $string, 2, PREG_SPLIT_DELIM_CAPTURE);
// Parts now looks like:
// array('bbb', 'a', 'bbbbcccc');
$parts[2] = str_replace('b', 'c', $parts[2]);
$correct_string = join('', $parts);
Во-вторых, поиск позиции и замена подстроки.
$string = 'bbbbabbbbbccccc';
$first_a_index = strpos($string, 'a');
if($first_a_index !== false) {
// Now, grab everything from that first 'a' to the end of the string.
$replaceable = substr($string, $first_a_index);
// Replace it.
$replaced = str_replace('b', 'c', $replaceable );
// Now splice it back in
$string = substr_replace($string, $replaced, $first_a_index);
}
В-третьих, я собирался опубликовать регулярное выражение, но один из опубликованных dqhendricks также хорош.
Эти примеры кода являются подробными для ясности и могут быть уменьшены до одного или двух строк.