Ограничитель регулярных выражений PHP, какой смысл? - PullRequest
15 голосов
/ 27 января 2009

Почему регулярные выражения PHP имеют окружающие разделители? Кажется, что было бы более понятно, если бы какие-либо модификаторы шаблона передавались в качестве параметра любой используемой функции.

Ответы [ 3 ]

17 голосов
/ 27 января 2009

Причиной разделителя является установка флагов после шаблона. Возможно, флаги можно было бы передать как отдельный параметр (Java может сделать это таким образом), но именно так Perl сделал это изначально (и sed / awk / vi до этого), так что сейчас это делается.

Не используйте косые черты: они слишком распространены. Лично я почти всегда пользуюсь! персонаж. Я почти никогда не ищу это.

7 голосов
/ 27 января 2009

Нет технической причины, по которой это должно быть так.

Как отмечается в комментарии, базовая библиотека не требует, чтобы флаги передавались как часть регулярного выражения - на самом деле расширение должно удалить их и передать их в качестве отдельного аргумента.

Похоже, что оригинальный разработчик пытался сделать его похожим на grep / sed / awk / perl / etc, чтобы он был более знаком для программистов, использующих эти инструменты.

6 голосов
/ 27 января 2009

Я не знаю, каковы были мотивы разработчиков функций preg. Единственная причина, по которой я могу придумать, заключается в том, что они слишком старались делать вещи по-Perl.

В то время как разделители позволяют указывать флаги вместе с регулярным выражением в качестве одного параметра, указание флагов в качестве отдельного параметра намного чище. Вот как это делает любая другая библиотека регулярных выражений (для языков, которые не поддерживают литеральные регулярные выражения в качестве языковой функции), включая библиотеку PCRE, на которой основаны PHP-функции preg. Код preg действительно должен пройти через задачу удаления разделителей регулярных выражений из строки с помощью регулярного выражения, прежде чем он будет передан в PCRE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...