[feyd@home]>php -r "$a = 'http had a kid named ahttp, followed by http jr'; var_dump(preg_split('#(?<!^|a)http#', $a));"
array(2) {
[0]=>
string(40) "http had a kid named ahttp, followed by "
[1]=>
string(3) " jr"
}
Find "http" not at beginning of strings nor when preceded by "a".
(?<! ... ) is what is called a negative, look-behind, zero-width assertion. The expression contained will cause the rest of the expression to not match if the text prior to that point matches it. If you remove the exclamation, it becomes a positive, look-behind.
The nice thing about zero-width assertions is that they are not included in the final match, only understood through the course of parsing it.