preg_replace('/http:///ftp:///', 'https://', $value);
http://
e ftp://
all'interno $value
deve essere sostituito con https://
Questo codice dà errore:
preg_replace() [function.preg-replace]: Unknown modifier '/'
Cos'è una regex vera per questo task?
Prova a utilizzare un delimitatore diverso, ad esempio #
:
preg_replace('#http://|ftp://#', 'https://', $value);
o (less consigliato) sfuggire ad each occorrenza del delimitatore nella regex:
preg_replace('/http:\/\/|ftp:\/\//', 'https://', $value);
Inoltre stai cercando il pattern http:///ftp://
che in realtà non ha molto senso, potresti http://|ftp://
dire http://|ftp://
.
Puoi rendere la tua regex più breve come:
preg_replace('#(?:http|ftp)#', 'https', $value);
Capire l'errore: Unknown modifier '/'
Nella tua regex '/http:///ftp:///'
, il primo /
è considerato come delimitatore iniziale e /
dopo il :
è considerato come il delimitatore finale. Ora sappiamo che possiamo fornire un modificatore alla regex per modificare il suo comportmento predefinito. Alcuni di questi modificatori sono:
i
: per rendere insensibile la distinzione tra maiuscole e minuscole m
: ricerca su più linee Ma ciò che PHP vede dopo il delimitatore di chiusura è un altro /
e tenta di interpretarlo come un modificatore ma fallisce, con conseguente errore.
preg_replace
restituisce la string alterata.
$value = 'http://foo.com'; $value = preg_replace('#http://|ftp://#', 'https://', $value); // $value is now https://foo.com
Ad esempio, usa un altro carattere di delimitazione, come '#'.
preg_replace('#/http://|ftp://#', 'https://', $value);
E non confondere / e |
preg_replace('!(http://|ftp://)!', 'https://', $value);
Lunga storia: Regexp deve essere racchiuso tra delimitatori e quelli devono essere unici all'interno dell'intera espressione regexp. Se vuoi usare /, allora i rimanenti / -s all'interno di regexp devono essere sfuggiti. Ciò tuttavia rende la syntax un po 'brutta. Fortunatamente puoi usare qualsiasi carattere come delimitatore. ! funziona bene, così come altri personaggi.
Il resto del regexp elenca solo due opzioni, che verranno sostituite con il secondo parametro.
preg_replace('|http:\/\/ftp:\/\/', 'https://|', $value);
Usa questo invece:
preg_replace('-(http|ftp)://-', 'https://', $value);
O
preg_replace('/(http|ftp):\/\//', 'https://', $value);