Intereting Posts
Facebook: сообщение на странице как вопрос страницы (токен доступа / php) Каков наилучший способ разбить строку на массив символов Юникода в PHP? Telegram BOT Api: как отправить фотографию с помощью PHP? Добавление атрибутов к объекту клиента Как создать конкретный массив из строки в php Как запустить запрос GET / POST / PUT / DELETE и тип запроса суждения в PHP? Ошибка # 2101: Строка, переданная в URLVariables.decode (), должна быть закодирована в URL Подключиться к удаленному файлу .mdb MS Access с php on linux Использовать fgetcsv для файла с разделителями табуляции Идентификатор страницы WordPress без идентификатора CodeIgniter RESTful, асинхронный / фоновый процесс PHP DOMXPath – выражение для выбора tr, содержащего вход с определенным атрибутом Конвертировать PDF (с прозрачностью * и * CMYK) в jpg Неопределенный метод для mock-объекта, реализующего данный интерфейс в PHPUnit? Создание форм с помощью Symfony 2.8 приводит к тому, что Twig_Error_Runtime

PHP preg_match неизвестный модификатор

Я пытаюсь проверить формат почтовых индексов Великобритании, используя регулярное выражение, найденное здесь: UK Postcode Regex (всеобъемлющий)

Мой тестовый PHP-код следующий: с кодом $ code почтовый индекс для тестирования

$regex = '(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX‌​]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[C‌​IKMOV]]{2})'; echo preg_match($regex,strtoupper($code)); 

Я получаю эту ошибку: Message: preg_match() [function.preg-match]: Unknown modifier '|'

Я не думаю, что проблема с регулярным выражением – это было подтверждено как ответ, и там было довольно много трафика, поэтому я считаю, что это должно было работать для других людей.

Вы видите, что я делаю неправильно? Я не эксперт по регулярному выражению, поэтому я борюсь. Вопрос в Regex для проверки UK Post Codes очень похож, но, реализуя решение (добавив ^ в начале и $ в конце), я получаю новую ошибку «Без конечного разделителя» ^ «найдено» …

Solutions Collecting From Web of "PHP preg_match неизвестный модификатор"

Я считаю, что ваш шаблон регулярного выражения должен быть заключен в /.../ , поэтому:

 $regex = '/(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX‌​]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[C‌​IKMOV]]{2})/'; 

PHP требует делителей вокруг регулярного выражения в стиле Perl. После того, как разделители приходят с любыми модификаторами . Выберите символ, который вы не используете в регулярном выражении. Наиболее распространенным является / .

 $regex = '/(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX‌​]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[C‌​IKMOV]]{2})/'; 

Это объясняет сообщение об ошибке, которое вы видите. Он думает, что регулярное выражение (GIR 0AA) с круглыми скобками в качестве разделителей, а затем пытается разобрать | как модификатор.

Вы должны использовать разделители в ваших выражениях preg_ .

Например:

 $regex = '#(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX‌​]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[C‌​IKMOV]]{2})#'; ^ here and here ^ 

попробуйте поставить бары в начале и конец выражения, например: /expression/

 $regex = "/(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX‌​]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[C‌​IKMOV]]{2})/" 

если u хочет, чтобы выражение было чувствительным к регистру, положите i (из «нечувствительного») после концевой строки. /expression/i

 $regex = "/(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX‌​]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[C‌​IKMOV]]{2})/i"