$str = 'a ab a ba a aab a';
$res = preg_replace_callback(
'/.?a.?/m',
function($matches) {
if ( preg_match( '/ab/', $matches[0] ) ) return $matches[0];
if ( preg_match( '/ba/', $matches[0] ) ) return $matches[0];
return str_replace( 'a', '[совпадение]', $matches[0] );
},
$str
);
print $res;
.?a.?
соответствует подстрока aab
. Дальше вы её проверяете на соответствие выражению ab
- успешно, замена не производится.preg_replace('~(?<!b)a(?!b)~', '[совпадение]', $str)