Intereting Posts
Как создать DateInterval из строки времени Не удается получить токен из Uber API с ключом действительного доступа : не удалось открыть поток: HTTP-запрос не удался! HTTP / 1.0 400 Bad Request Запрос UPDATE не работает с LIMIT API геокодирования Google Maps – смещение страны, причудливые результаты Надежно оценить простые математические данные поисковый запрос и получить результат поиска без обновления (pagenation) Сортировка сложных массивов по имени Как напечатать целое число в форме треугольника php абстрактный класс, расширяющий другой абстрактный класс Можете ли вы повторно использовать набор результатов mysql в PHP? Есть ли способ, чтобы Behat НЕ выходил из строя на ошибках уведомления PHP? WooCommerce 3.0+ изменить формат столбца даты заказа администратора AWS: политика пользователя IAM для SES не работает Как я могу использовать имена полей ввода формата массива в моей HTML-форме, которые отправляются на PHP?

Почему для функций PHP preg_ * требуются разделители regexp?

Это меня раздражает:

Почему preg_match('/pattern/', $haystack) вместо preg_match('pattern', $haystack) ? Все, что я видел, просто указывает на то, что они необходимы, и упоминает, что вы можете использовать альтернативные разделители.

Но это функция, которая определяет собственный интерфейс за пределами строки. Он имеет аргумент flags . Добавление внутристрочного синтаксиса кажется капризным.

Это что-то унаследованное от ПК, что авторы просто не интересовались работой? Еще один извращенный факт PHP? Или есть оправдание?

Разделители совместимы с Perl. Регулярные выражения Perl используют разделители и полагаются на конечный разделитель, чтобы обозначить начало флажков-модификаторов , например, i для нечувствительности к регистру.

 // Match alpha-numeric, case insensitive, multiline preg_match('/^[a-z0-9]+$/im', $input); 

Необязательный аргумент flags для preg_match() не реализует флаги регулярного выражения, такие как i которые следуют за вторым разделителем. Они выполняют другую функцию, и действительно PREG_OFFSET_CAPTURE – единственный доступный там флаг. Это не означает, что флаги регулярных выражений не могли быть реализованы как еще один параметр функции. Они, конечно, могли бы иметь, но Perl-совместимость – это цель здесь.

PHP не является единственным языком, который заимствует непосредственно из Perl для реализации регулярных выражений. JavaScript делает до некоторой степени, и Ruby даже реализует оператор Perl =~ для совпадений регулярных выражений.

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

Разделитель предназначен для совместимости с Perl (таким образом, Perl Compatible Regular Expressions или PCRE). Шаблон также включает в себя любые модификаторы, которые вы решили использовать, и они должны быть размещены после закрытия разделителя.

Это что-то унаследовано?

Правда, каждый язык программирования нуждается в стандарте, поэтому PCRE является лучшим стандартом. щелчок