Решение (которое не упоминается в других ответах - по крайней мере, на момент написания этой статьи) состоит в том, что, когда PHP ссылается на разделители, это не относится к разделителям, которые вы видите в своем коде (которые являются кавычками), а следующим символы внутри строки. (На самом деле я никогда не видел, чтобы это говорилось в какой-либо документации: вы должны видеть это в примерах.) Итак, вместо синтаксиса регулярных выражений, подобного тому, к которому вы, возможно, привыкли во многих других языках:
/something/
PHP использует строки, а затем ищет внутри строки другой разделитель:
'/something/'
Разделитель, на который ссылается PHP, - это пара /
символов, а не пара '
символов. Поэтому, если вы напишете 'something'
, PHP будет использовать s
как предполагаемый разделитель и пожаловаться, что вам не разрешено использовать буквенно-цифровые символы в качестве разделителя.
Поэтому, если вы хотите передать (например), i
чтобы показать, что вы хотите совпадение без учета регистра, вы передаете его внутри строки, но за пределами разделителей регулярных выражений:
'/something/i'
Если вы хотите использовать что-то другое, кроме /
как разделитель, вы можете, например, если вы сопоставляете URL-адрес и не хотите экранировать все косые черты:
'~something~'
preg_match()
как переменные, убедитесь, что вы не получили случайный порядок переменных в вызове функции, так как это почти наверняка приведет к тому же самому появляется ошибка.