La soluzione (che altre risposte non menzionano — almeno al momento della mia scrittura originale) è che quando PHP fa riferimento ai delimitatori, non si riferisce ai delimitatori che vedi nel tuo codice (che sono virgolette) ma i successivi caratteri all'interno della stringa. (In realtà non ho mai visto questo indicato da nessuna parte in alcuna documentazione:. Bisogna vederlo in esempi) Così, invece di avere una sintassi delle espressioni regolari come quello che si può essere abituati a da molte altre lingue:
/something/
PHP utilizza stringhe, e poi guarda dentro la stringa per un'altra delimitatore:
'/something/'
il delimitatore di PHP si riferisce è la coppia di /
personaggi, invece della coppia di '
caratteri. Quindi, se scrivi 'something'
, PHP prenderà il s
come delimitatore previsto e si lamenterà che non ti è permesso usare caratteri alfanumerici come delimitatori.
Quindi, se si desidera passare (per esempio) un i
per dimostrare che si vuole una partita insensitve caso, si passa all'interno della stringa, ma al di fuori dei delimitatori regex:
'/something/i'
Se si desidera usare qualcosa di diverso /
come delimitatore, è possibile, come ad esempio se si sta corrispondenza di un URL e non vogliono avere per sfuggire tutte le barre:
'~something~'
Come nota che può essere utile agli altri, se si passa tutti i vostri argomenti per 'preg_match()' come variabili, assicurarsi che non si ottiene l'ordine delle variabili accidentalmente mescolati nel chiamata di funzione poichè questo quasi certamente porterà allo stesso errore che appare. – bluebinary