Параметры в документации PHP, квадратные скобки?

Эта функция, например …

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] ) 

Он берет строки $pattern и $subject . Однако, что [ ?

Вот как документация для функции указывает аргументы, которые являются необязательными

Это старое соглашение об использовании сообщений Unix-систем:

На Unix-подобных платформах сообщения об использовании, как правило, следуют тем же часто используемым пользователям шаблонов. Они часто начинаются с «Usage:» (отсюда, возможно, имя), команды, за которой следует список аргументов. Чтобы указать необязательные аргументы, квадратные скобки обычно используются и могут также использоваться для группировки параметров, которые должны быть указаны вместе. Исключительные параметры можно указать, разделив их на вертикальные полосы внутри групп.

Вот подробный пример, основанный на руководстве по стилю исходного кода NetBSD:

Использование: program [-aDde] [-f | -g] [-n number] [-b b_arg | -c c_arg] req1 req2 [opt1 [opt2]]

Это означало бы, что «программа» должна быть вызвана с:

  • опции без операндов: a, D, d, e (любой из них может быть опущен). Обратите внимание, что в этом случае некоторые параметры чувствительны к регистру
  • эксклюзивные опции: f, g (обозначается вертикальной полосой)
  • опции с операндами: n
  • эксклюзивные опции с операндами: b, c
  • требуемые аргументы: req1, req2
  • необязательный аргумент opt1, который может использоваться с opt2 (или без него) (помечено как опция в группе с помощью другого набора квадратных скобок)
  • необязательный аргумент opt2, для которого требуется opt1