PCRE模式修饰符常量,它们的作用域是可见的


PCRE pattern modifier constants, which scope are they visible?

当阅读关于PCRE模式修饰符时,我注意到每个修饰符都有一个字符串字面量,这是我熟悉的用法,以及一个常量,我认为这是一个显式替代的公平游戏。

但是,当引用这些常量时,像这样说

echo PCRE_CASELESS === "i";

我得到这个错误

PHP Notice: Use of undefined constant PCRE_CASELESS - assumed 'PCRE_CASELESS'

仔细阅读说明书,我注意到上面写着

The names in parentheses refer to internal PCRE names for these modifiers

内部到什么?文档中列出了它们,这一事实使我认为它们在全局作用域中是可用的。

文档引用了底层PCRE库内部使用的名称,这些名称不能从PHP用户空间直接访问。这些名称只是为了方便在文档中使用。

您指定修饰符作为实际正则表达式的一部分—例如,如果您想使用无大小写修饰符(i),您将使用/regex/i:

preg_match('/pattern/i', ...);

见http://php.net/manual/en/regexp.reference.delimiters.php

prec库内部。它们不暴露于php用户地代码。它们出现在手册中只是为那些知道库本身常量或其他语言实现的人提供信息。所以一个人看到"PCRE_CASELESS"就知道发生了什么,而不需要再读一遍全文。