<?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 パターンの中でのコメントの使い方
<?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