<?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";
// 结果
// 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";
// 结果
// 1
// 0
// 1