Il primo carattere della regex diventerà il separatore, ergo il PHP cerca il ^ che termina la regex. Cambiandola come segue ti va in errore per altri motivi:
codice:
$pattern = "|^((http(s)?://)?(www.)?[a-zA-Z0-9.#@:%&_?=~-]+)?][a-zA-Z0-9.#@:%&_?=~-/]+$|"
Ora il problema è che il - in fondo ti crea un range tra ~ e /
Mettilo alla fine così non rompe:
codice:
$pattern = "|^((http(s)?://)?(www.)?[a-zA-Z0-9.#@:%&_?=~-]+)?][a-zA-Z0-9.#@:%&_?=~/-]+$|"
Inoltre, c'è una quadra chiusa che mi puzza di boiata:
codice:
$pattern = "|^((http(s)?://)?(www.)?[a-zA-Z0-9.#@:%&_?=~-]+)?[a-zA-Z0-9.#@:%&_?=~/-]+$|"