<?php
$string = 'test';
echo preg_match('/te(?# comments)st/', $string) . "\n";
echo preg_match('/te#~~~~
st/', $string) . "\n";
echo preg_match('/te#~~~~
st/x', $string) . "\n";
// result
// 1
// 0
// 1
Служебная последовательность (?# обозначает начало комментария, который продолжается до ближайшей закрывающей скобки. Вложенные скобки не допускаются. Символы, находящиеся внутри комментария, не принимают участия в сопоставлении шаблона.
Если используется модификатор PCRE_EXTENDED, неэкранированный символ «#» вне символьного класса также означает начало блока комментария, который длится до конца текущей строки.
Пример #1 Использование комментариев в шаблоне PCRE
<?php
$subject = 'test';
/* (?# можно использовать для добавления комментариев без включения PCRE_EXTENDED */
$match = preg_match('/te(?# this is a comment)st/', $subject);
var_dump($match);
/* Пробелы и # рассматриваются как часть шаблона, если не включён PCRE_EXTENDED. */
$match = preg_match('/te #~~~~
st/', $subject);
var_dump($match);
/* Когда PCRE_EXTENDED включён, все пробелы и всё, что следует за неэкранированным # в той же строке, игнорируется. */
$match = preg_match('/te #~~~~
st/x', $subject);
var_dump($match);
Результат выполнения приведённого примера:
int(1) int(0) int(1)
<?php
$string = 'test';
echo preg_match('/te(?# comments)st/', $string) . "\n";
echo preg_match('/te#~~~~
st/', $string) . "\n";
echo preg_match('/te#~~~~
st/x', $string) . "\n";
// result
// 1
// 0
// 1