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