A solução (que outras respostas não mencionam - pelo menos no momento em que escrevi isso originalmente) é que quando PHP se refere a delimitadores, não está se referindo aos delimitadores que você vê em seu código (que são aspas), mas o próximo caracteres dentro da string. (Na verdade, nunca vi isso declarado em nenhuma documentação: você tem que ver em exemplos.) Então, em vez de ter uma sintaxe de expressão regular como a que você está acostumado em muitas outras linguagens:
/something/
O PHP usa strings e, em seguida, procura outro delimitador dentro da string :
'/something/'
O delimitador ao qual o PHP está se referindo é o par de /
caracteres, ao invés do par de '
caracteres. Portanto, se você escrever 'something'
, o PHP tomará s
como delimitador pretendido e reclamará que você não tem permissão para usar caracteres alfanuméricos como delimitador.
Portanto, se você quiser passar (por exemplo) um i
para mostrar que deseja uma correspondência não sensível a maiúsculas e minúsculas, passe-o dentro da string, mas fora dos delimitadores regex:
'/something/i'
Se quiser usar algo diferente de /
seu delimitador, você pode, por exemplo, se estiver correspondendo a um URL e não quiser ter que escapar todas as barras:
'~something~'
preg_match()
como variáveis, certifique-se de não misturar a ordem das variáveis acidentalmente na chamada de função, pois isso quase certamente resultará no mesmo erro aparecendo.