Assuming parentheses are "valid", you can replace all foo
s that are followed by )
, without a (
in between:
$str = preg_replace('/foo(?=[^()]*))/', 'bar', $str);
Working example: http://ideone.com/xezU7
Another option, also assuming no nested pairs, is to match "(...)"
tokens and use a callback, but it may be use of excessive force:
Callback method:
function replace_foo($matches) {
return str_replace('foo', 'bar', $matches[0]);
}
use:
$str = preg_replace_callback("/([^()]*)/","replace_foo", $str);
Working example: http://ideone.com/ZzBem
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…