Это меня раздражает:
Почему 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 является лучшим стандартом. щелчок