後方参照とオプションの文字列の矛盾する性質に少し混乱しています。
URLを見つけたいとしましょう。オプションで、先頭にhttp://を付けます。そうし(http:\/\/)...
ますか?しかし、それは私が\1や$1などでアクセスできる後方参照を作成しませんか?
したがって、キャプチャしないサブパターンが必要です。
(?:http:\/\/)
^^
さらに、すべてのスラッシュをエスケープする必要がないように、区切り文字を変更することをお勧めします。例:
preg_replace('@(?:http://)@', ...)