La soluzione (che altre risposte non menzionano, almeno al momento in cui ho scritto originariamente questo) è che quando PHP si riferisce ai delimitatori, non si riferisce ai delimitatori che vedi nel tuo codice (che sono virgolette) ma il prossimo caratteri all'interno della stringa. (In effetti non l'ho mai visto affermato da nessuna parte in nessuna documentazione: devi vederlo negli esempi.) Quindi, invece di avere una sintassi di espressioni regolari come quella a cui potresti essere abituato da molte altre lingue:
/something/
PHP utilizza le stringhe e quindi cerca all'interno della stringa un altro delimitatore:
'/something/'
Il delimitatore a cui si riferisce PHP è la coppia di /
caratteri, anziché la coppia di '
caratteri. Quindi, se scrivi 'something'
, PHP prenderà s
come delimitatore previsto e si lamenterà del fatto che non ti è permesso utilizzare caratteri alfanumerici come delimitatore.
Quindi, se vuoi passare (ad esempio) un i
per mostrare che vuoi una corrispondenza senza maiuscole e minuscole, lo passi all'interno della stringa ma al di fuori dei delimitatori regex:
'/something/i'
Se vuoi usare qualcosa di diverso da /
come delimitatore, puoi farlo, ad esempio se stai abbinando un URL e non vuoi dover sfuggire a tutte le barre:
'~something~'
preg_match()
come variabili, assicurati di non ottenere l'ordine delle variabili accidentalmente confuso nella chiamata di funzione poiché questo quasi certamente risulterà anche in questo stesso errore visualizzato.